2016-11-30 5 views
1

저는 C++ 프로그래밍을 처음 사용합니다.C++ 오류 : 필드에 불완전한 형식이 있습니다 - 자체 클래스 개체를 선언합니다

#ifndef NODE_H 
#define NODE_H  

class Node 
{ 
    public: 
     Node(); 
     Node(int); 
     virtual ~Node(); 
     Node(const Node& other); 

     int getValue() { return value; } 
     void setValue(int val) { value = val; } 
     Node getPrev() { return prev; } 
     void setPrev(Node val) { prev = val; } 
     Node getNext() { return next; } 
     void setNext(Node val) { next = val; } 

    private: 
     int value; //!< Member variable "value" 
     Node prev; //!< Member variable "prev" 
     Node next; //!< Member variable "next" 
}; 

#endif // NODE_H 

그것은 말한다 :

error field 'prev' has incomplete type 
error field 'next' has incomplete type 

내가 포인터/참조를 사용하는 경우, 프로그램이 잘 작동 여기 내 코드입니다. 왜이 메커니즘이 존재합니까? 어떻게 포인터/참조하지 않고 그것을 할 수 있습니까? 답변 해 주셔서 감사합니다.

+0

모든 '노드'에 'int'와 두 개의 '노드'가 포함되어 있으면 그 크기는 무한대가됩니다. 아마 당신이 원하는 것이 아닙니다. – Quentin

+0

* "포인터/참조없이 어떻게 할 것인가?"* 긴 이야기 : 당신은 할 수 없습니다. –

+0

다른 방법 : https://stackoverflow.com/questions/6349822/incomplete-type-in-class-which-has-a-member-of-the-same-type-of-the-class-itse –

답변

3

클래스는 닫는 중괄호까지 완전히 정의되지 않습니다. 그 전에는 클래스의 객체를 정의 할 수 없습니다. 주된 이유는 객체의 크기가 아직 알려지지 않았기 때문에 컴파일러는 멤버 변수에 할당 할 메모리 양을 알지 못합니다.

클래스에 대한 포인터 또는 참조를 사용하면 컴파일러는 실제 클래스의 크기와 관련이 없으므로 포인터 또는 참조가 얼마나 많은 메모리를 차지하는지 알 수 있습니다.

관련 문제