类定义错误 - 字段next具有不完整类型

时间:2015-04-16 03:05:23

标签: c++

我有一个非常小的问题。为什么这段代码会抛出以下错误?

  

字段next的类型不完整。

我声明了一个具有属性

的类
#ifndef NODE_H
#define NODE_H

class Node
{
public:

    int d;

    Node(int d){
        this->d = d;
    }

    Node next = 0;

};

#endif // NODE_H

BUT !!!如果我改变了指针的作用:

Node *next;

很有意思,因为这是来自破解编码面试的书。

有人可以对我有所了解吗? (最有可能让我感到羞耻:D)

提前致谢

我完成了我的作业而我无法找到解决方案herehere

2 个答案:

答案 0 :(得分:5)

您正在声明类型为Node的类,但该声明在到达右括号和分号之前尚未完成。

class Foo
{
}; // Class declaration is complete now

但是以下内容无效,请参阅代码注释。

class Node
{
public:

    int d;

    Node(int d){
        this->d = d;
    }

    // This is a instance of a class and as such the compiler needs to
    // know the full definition of the class. HOWEVER, this is the class
    // that's being defined (i.e., it isn't fully defined yet!)
    Node next = 0; // Assigning 0 here doesn't make any sense

};
  

BUT !!!如果我换一个指针工作

指针不需要完整的类型(即,不需要完整定义),因此在定义Node类时可以使用它。

答案 1 :(得分:0)

我没有得到错误,这只是智能感知错误。

但是,Node尚未完全定义,因此编译器不知道它是什么类型的对象,或者它占用了多少内存。

无论如何,我不认为这是问题所在。在Node类本身内声明Node对象会产生递归依赖,同样,编译器也无法解析Node需要多少内存。

由于指针只是一个内存地址并且具有固定的大小,因此编译器很高兴并且可以声明它。