2010-07-06 4 views
7

게임을 만들고 있는데 클래스가 있고 코드에 Block 클래스가 있는데 둘 다 서로 필요하지만 별도의 파일에 있습니다. 수업을 "미리 정의하는"방법이 있습니까? Objective-C의 @class 매크로처럼?C++ : 서로 필요한 두 클래스

+2

원하는 사운드는 전달 선언입니다. – mooware

+0

+1 BlockDude입니다. –

답변

5

순환 종속성이라고합니다. 클래스에서 Two.h

class One; 

class Two { 
    public: 
    One* oneRef; 
}; 

그리고 클래스의 One.h

class Two; 

class One { 
    public: 
    Two* twoRef; 
}; 

은 "클래스 하나;" 및 "클래스 2;" 지시문은 클래스 이름을 각각 "One"및 "Two"로 할당합니다. 그러나 그들은 그 이름을 초월한 다른 세부 사항을 정의하지 않는다. 따라서 당신은 포인터를 클래스를 만들 수 있지만 전체 수업과 같이 포함 할 수 없습니다

class One; 

class Two : public One { 
}; 

class Three { 
    public: 
    One one; 
}; 

컴파일러가 클래스 하나가 알고있는 동안, 그것은 '아무튼 때문에 위의 두 예는 컴파일되지 않습니다 이유는 실제 클래스 정의가 아닌 이름 만 정의 되었기 때문에 클래스 One에 포함될 수있는 필드, 메소드 또는 가상 메소드를 알 수 없습니다.

11

예.

class Man; 

이렇게하면 Man이 "불완전한 유형"으로 선언됩니다. 포인터 나 참조 및 다른 몇 가지 사항을 선언 할 수 있지만 인스턴스를 만들거나 멤버에 액세스 할 수는 없습니다. 이것은 불완전한 유형으로 할 수 있거나 할 수없는 것에 대한 완전한 설명은 아니지만 일반적인 생각입니다.

+1

중요한 점은 계속 진행하고 전체 유형을 나중에 포함하여 액세스 할 수 있다는 것입니다. 헤더에 불완전한 타입을 사용하고 그것을 사용하기 위해 전체 헤더 정의를 cpp에 포함시킬 수 있습니다. –

관련 문제