错误,不允许不完整的类型

时间:2013-02-25 01:47:49

标签: c++

#include "passenger.h"
class node
{
public:
    passenger dataItem;
    node nextNode;
};

为什么在尝试创建类型为其所在类的变量时,我会得到不完整类型不允许的错误?

1 个答案:

答案 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