#include "passenger.h"
class node
{
public:
passenger dataItem;
node nextNode;
};
为什么在尝试创建类型为其所在类的变量时,我会得到不完整类型不允许的错误?
答案 0 :(得分:4)
尽量遵循编译器的过程。
什么是sizeof(node)
。
要修复,请考虑使用指向节点的指针。
class node
{
public:
passenger dataItem;
node * nextNode;
};
看到你的代码之后,看起来你是来自Java / C#背景,这意味着你确实需要指针,从那些语言模拟引用
请记住,对象在这些语言中是引用类型,而在C / C ++中它们是值类型。区别在于node nextNode
指向Java / C#中的下一个节点,而它是C / C ++中的对象本身。
修改的:
您的错误是由于当您定义成员变量nextNode
时,您仍然在定义node
,因此不完整。 node*
将起作用,因为指针只需要一个前向声明,并且对于不完整的类型都可以。
同样,它在Java / C#中工作,因为这些语言中的每个变量(减去C#struct
和Java原语)都只是一些构成的指针。
编辑:请阅读C ++和new
/ delete
中的指针。我希望您即将发生一两次崩溃.. :(。另请查看What are the barriers to understanding pointers and what can be done to overcome them?开始。
总而言之,要指定指针,请执行以下操作。
node a;
node b;
a.nextNode = &b; //& operator returns the address of its operand, here b