개인 속성 중 하나가 클래스의 인스턴스 인 클래스가 있습니다. (나는 자바에 익숙하기 때문에) 자바에서는이 보이는 같은 :자신의 클래스의 로컬 인스턴스 수정
class Node {
private Node Pi;
}
그리고 지금은 C++에서 이것을 쓰고 있어요, 나는 같은 일을하려고 할 때, 나는 '(빨간색 밑줄을 얻을 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