不允许使用不完整的类型

3
尝试创建一个简单的父/子节点类,但遇到了"Incomplete Type Is Not Allowed"错误。为什么?
class Node {
public:
    Node ParentNode;  //Error on this line
    string NodeName;


    Node(Node *node) : ParentNode(*node) {

    }
};

3
如果允许这样做,你会得到一个无限的编译。编译器将递归地尝试为每个节点实例插入其定义。 :) - Vlad from Moscow
你可以将它变成一个指针。 - 001
1
Node ParentNode; => Node *ParentNode; - Stargateur
一个 Node 的大小是多少? 忽略填充,它的大小是一个 Node 的大小 + 一个 string 的大小。你看,这并没有什么意义。 - Kevin
2
可能是Can a c++ class include itself as an attribute?的重复问题。 - Kevin
2个回答

6
您正在尝试:
Node ParentNode;  //Error on this line

但是在这一点上,Node并不是一个完整的类型(实际上您正在定义它),结构体不能包含自身的实例,可以包含指向自身实例的指针或引用,但不能包含实际实例。毕竟,如果允许这种递归包含,那么它将无休止地进行下去。

3

错误提示表明在定义类时,类的定义不完整。

对象不能包含其自身类型的实例——这将使其无限大。

你想要

Node* ParentNode;

并且

Node(Node *node) : ParentNode(node)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接