C 中的未知类型名称错误

Unknown type name error in C

我正在用 C 尝试一些基本的数据结构。很长一段时间后我又回到了 C。这是我的简单 struct:

typedef struct
{
    int data;
    LLNode *next; //Error: unknown type name 'LLNode'
}LLNode;

但是编译报错如上图。是因为在编译 struct 时编译器不知道 LLNode 的存在吗?这意味着我必须在 struct 之前首先声明 LLNode。是这样吗?如果是,我应该怎么做?

这样做:

typedef struct LLNode LLNode;

struct LLNode {
    int data;
    LLNode *next; //No error
};

您不能使用 LLNode 未定义的类型。 使用此方法,您首先声明 LLNode 是什么。即使尚未定义 struct LLNode,此声明足以声明 LLNode * 成员(但您还不能声明 LLNode 成员),因为指针的大小不依赖于指针的类型。

结构的数据成员 next 被声明为未知类型 LLNode

更正后的例子

typedef struct LLNode
{
    int data;
    struct LLNode *next; //Error: unknown type name 'LLNode'
}LLNode;

请注意,结构标记名称和 typedef 名称位于不同的名称空间中。所以你可以同时使用这两个名字,比如 struct LLNodeLLNode.

typedef 直到最后都不完整,因此 LLNode 不能用作 struct 中的类型名称。但是,struct tag 可用,因此您可以这样做:

typedef struct LLNode
{
    int data;
    struct LLNode *next;
} LLNode;

这会生成一个 struct,其结构与您的 post 中的结构相同,因为 struct LLNodetypedef 编辑为 LLNode

您可以使用:

typedef struct LLNode LLNode;
struct LLNode
{
int data;  
LLNode *next;   
};