2014-04-25 2 views
5

가정 :컴파일러 오류 C4430은 : - 실종 유형 지정자 INT 내가이 오류가

"오류 C4430 : 누락 된 형식 지정자 - int로 가정 참고 : C++ 기본-INT 지원하지 않습니다."이 코드

을 예 :

//A.h  
#include "B.h" 
class A{ 
    B* b; 
    .. 
}; 

//B.h 
#include "A.h" 
class B{ 
    A* a; // error error C4430: missing type specifier - int assumed. 
}; 
+5

클래스 A를 헤더 파일 B.h로 미리 선언해야 사용할 수 있습니다. –

+7

서로를 포함하는 두 개의 헤더는 좋은 생각이 아닙니다. "A를 이해하려면 먼저 B를 이해해야합니다." "B를 이해하려면 먼저 A를 이해해야합니다." –

+1

그러나 나는 그것을 필요로한다! 이 문제를 해결하는 방법? – user3571201

답변

17

이것은 circular dependency입니다. 어떤 클래스에 대한 포인터를 선언 할 때 클래스의 정의는 필요하지 않습니다. 유형이 complete type 일 필요는 없습니다. A.hB.h에 포함시킬 필요가 없으므로 forward declaration이면 충분합니다. 예 :

//B.h 
class A; // change the include of A.h to forward declaration 
class B { 
    A* a; 
}; 
+0

하지만 클래스 B의 클래스 A의 기능을 사용해야합니다! 귀하의 주에서 나는 이것을 할 수 없습니다! – user3571201

+2

@user : 헤더에 없어도됩니다. B의 구현 파일 (.cpp)에 두 헤더를 모두 포함 할 수 있습니다.이 때 A의 모든 메소드와 멤버에 액세스 할 수 있습니다. – Cameron

+0

@ user3571201 클래스 'B'에서 클래스 A의 함수를 사용합니다 님의 멤버 함수는 무엇입니까? 그렇다면'B.h'를 포함하는'B.cpp'에'B' 멤버 함수를 정의 할 수 있습니다. – songyuanyao