错误,不允许类型不完整

error, incomplete type not allowed

本文关键字:类型 不允许 错误      更新时间:2023-10-16
#include "passenger.h"
class node
{
public:
    passenger dataItem;
    node nextNode;
};

为什么在尝试创建一个类型为其所在类的可变对象时,会出现不完整的类型不允许错误?

试着跟随编译器完成过程。

什么是sizeof(node)

若要修复此问题,请考虑使用指向节点的指针。

class node
{
public:
    passenger dataItem;
    node * nextNode;
};

在看到您的代码后,看起来您来自Java/C#背景,这意味着实际上,您确实想要指针,以模拟这些语言的引用

请记住,在这些语言中,对象是引用类型,而在C/C++中,它们是value类型

编辑:您的错误是由于以下事实造成的:当您定义成员变量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