2009-06-20 5 views
4

** 구조가 자체 참조 일 수있는 경우. like수업을 자체 참조 할 수 있습니까?

struct list 
{ 
    struct list *next; 
}; 

기본 액세스 지정자를 제외하고 클래스와 구조체간에 차이가 없으므로 다음은 ... 클래스를 작성할 수

class list 
{ 
    class list *next; 
}; 

또는 될 수있는 자기 참조 클래스를 얻을 수있는 다른 구문이있다.? 그렇다면 다음 방법 **

+2

자신이 언급했듯이 기본 액세스 수정자를 제외하고 C++의 클래스와 구조체 사이에는 전혀 차이가 없습니다. –

+2

C++에서 적어도 99.9 %의 경우, "class list {list * next;};"와 같이 변수 이름 앞에 'struct'또는 'class'를 입력하지 않아도됩니다. –

+0

예, "struct list * next;"를 넣어야합니다. C 일뿐입니다. C++에서는 항상 "list * next;"를 수행합니다. – newacct

답변

12

네,하지만 당신은 포인터 나 클래스 (또는 구조체)

일반적인 방법에 대한 참조 그냥 단지 자기 참조입니다 수 :

class list { list* next; } 

당신이 forw 단지 전체 선언 (없는 경우

class list; 
class node; 

class list { node* first; } 
class node { list* parentList; node* next; } 

을 : 당신이 서로 서로 참조하는 두 개의 클래스가 필요하면, 당신은 너무처럼 클래스를 선언 전달할 필요 ard 선언), 포인터 또는 참조 만 선언 할 수 있습니다. 이것은 컴파일러가 항상 포인터 또는 참조의 크기를 알고 있지만 전체 선언이없는 경우 클래스 또는 구조체의 크기를 알지 못하기 때문입니다.

+2

+1 - nice -하지만 마지막 문장은 'class definition'으로 끝나야합니다 (선언이 아닙니다 :) –

+0

+1 Faisal/Lou. "클래스 X;" 불완전한 유형의 "완전한 선언"입니다. C는 "struct list {int d;};"를 호출하지 않습니다. 정의가 아니라 완전한 유형의 선언이라고합니다. C++은 정의를 호출하여이를 나타냅니다. 그렇지 않으면 좋은 대답입니다. –