我有一个类,其中一个私有属性是类的一个实例。在Java(因为我已经习惯了Java的),这看起来像:修改自己类的本地实例
class Node {
private Node Pi;
}
现在我在C++写这个,当我试图做同样的事情,我得到一个红色下划线(I” m使用Visual C++ 2010 Express),“不完整类型不允许”。
class Node {
private:
Node Pi; //Incomplete type is not allowed
};
我试图将其更改为Node Pi(void);
,但为什么我尝试使用修改这个属性我得到另一个功能“的表达式必须修改的左值”修复此。
class Node {
private:
Node Pi(void);
public:
void setPi(Node n);
};
void Node::setPi(Node n) {
Pi = n; //Node Node::Pi() expression must be a modifiable lvalue
}
通常在Java中没有问题,所以我的问题是,我该如何实现这个?我不是C++的初学者,但我还没有写过一段时间。
class Node {
private Node Pi;
void setPi(Node n) {
this.Pi = n;
}
}
“不完全类型不允许”意味着你不能创建尚未完全定义一个类的实例。在编译器读取其大括号和分号之前,类不是“完整的”。一个类不能包含自己的一个实例;这将是一个循环定义。 – Wyzard