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

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

4

1 回答 1

5

尝试遵循编译器的过程。

是什么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我希望您很快就会遇到一两次崩溃.. :(。另请查看理解指针的障碍是什么以及可以采取哪些措施来克服它们?开始.

总而言之,要分配指针,请执行以下操作。

node a;
node b;

a.nextNode = &b; //& operator returns the address of its operand, here b
于 2013-02-25T01:49:11.607 回答