我在C中尝试了一些基本的数据结构。很长一段时间后我都会回到C语言。这是我简单的struct
:
typedef struct
{
int data;
LLNode *next; //Error: unknown type name 'LLNode'
}LLNode;
但它给出了如上所示的编译错误。是因为编译struct
编译器时不知道LLNode
的存在吗?这意味着我必须首先在LLNode
之前声明struct
。是这样的吗?如果是的话我该怎么做呢?
答案 0 :(得分:6)
结构的数据成员next
被声明为LLNode
类型,这是未知的。
更正后的例子
typedef struct LLNode
{
int data;
struct LLNode *next; //Error: unknown type name 'LLNode'
}LLNode;
考虑结构标记名称和typedef名称位于不同的名称空间中。因此,您可以同时使用这两个名称,例如struct LLNode
和LLNode
。
答案 1 :(得分:5)
这样做:
typedef struct LLNode LLNode;
struct LLNode {
int data;
LLNode *next; //No error
};
在定义之前,您不能使用LLNode
类型。
使用此方法,您首先声明LLNode
是什么。即使struct LLNode
尚未定义,此声明也足以声明LLNode *
成员(但您无法声明LLNode
成员)因为指针的大小不依赖于指针的类型。
答案 2 :(得分:2)
typedef
在结束前不完整,因此LLNode
在struct
内不可用作类型名称。但是,struct
标记可用,因此您可以执行此操作:
typedef struct LLNode
{
int data;
struct LLNode *next;
} LLNode;
这会产生struct
,其结构与帖子中的内容相同,因为struct LLNode
为typedef
- 编辑为LLNode
。
答案 3 :(得分:0)
你可以使用:
typedef struct LLNode LLNode;
struct LLNode
{
int data;
LLNode *next;
};