struct node{
struct node next;
int id;
}
给出“字段接下来有不完整的类型错误”。
这个结构有什么问题?
答案 0 :(得分:12)
创建自引用数据类型时,需要使用指针来解决循环问题:
struct node;
struct node {
struct node * next;
int id;
}
...应该可行,但在使用时请注意正确分配内存。
为什么指针?考虑一下:struct
定义的要点是,当您说node.id
时,编译器可以计算出要分配的内存量和要访问的部分。如果您的node
结构包含另一个node
结构,那么编译器应该为给定的node
分配多少内存?
通过使用指针可以解决这个问题,因为编译器知道为指针分配多少空间。
答案 1 :(得分:5)
如果struct 可以包含其自己类型的另一个实例,则其大小将是无限的。
这就是为什么它只能包含指针到它自己的类型。
此外,在代码中的那一点,结构的大小是未知的,因此编译器无法知道为它保留多少空间。
答案 2 :(得分:2)
node
。试试这个:
struct node;
struct node{
struct node *next;
int id;
};
答案 3 :(得分:1)
不完整类型的某些用法是不正确的,例如当您尝试声明不完整类型的对象时。但是,您可以声明指向不完整类型的指针(例如)。在这种情况下,这就是这里所需要的:
struct node{
struct node *next;
int id;
};
答案 4 :(得分:0)
问题是,当编译器到达这一行时:
struct node{
struct node next; /* << this line */
编译器实际上不知道struct node
是什么,因为你正在定义struct node
。
通常,您不能使用未定义或不完整的类型。
答案 5 :(得分:0)
为了工作,你应该写:
typedef struct _node{
struct _node* next;
int id;
}node;