2012-04-15 2 views
1

안녕하세요, 두 클래스 A와 B가 있습니다. A에 대한 A 헤더 파일을 사용하여 B에 대한 인스턴스 (예 : B * b)를 만들 수 있고 클래스 B에서 수행중인 작업 (예 : A의 헤더 파일 포함) 및 A 예 : A * a) B.헤더 파일을 포함하는 중 오류가 발생했습니다.

나는 그것이 나에게 아에 다음과 같은 오류를 제공 B에서 A의 헤더 파일을 포함하고있는 동안

1>c:\Bibek\A.h(150) : error C2143: syntax error : missing ';' before '*' 
1>c:\Bibek\A.h(150)(150) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
1>c:\Bibek\A.h(150)(150) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
+3

정보가 충분하지 않습니다. 'A.h'에는 무엇이 있습니까? 특히 150 행과 그 주변에 있습니까? – geekosaur

+0

여기에 일부 코드를 사용할 수 있습니다. –

답변

4

당신이 원형 방식으로 헤더 파일을 (아 포함 BH를 포함 포함한처럼 소리 아). 헤더 가드를 사용한다는 것은 B.h가 위의 시나리오에서 A.h를 포함하면 A.h의 현재 활성 포함 가드로 인해이를 건너 뜁니다. 따라서 B.h를 구문 분석 할 때 A.h의 유형이 아직 정의되지 않았습니다.

이, 해결하기 위해 당신이 선언 앞으로 사용할 수 있습니다 : BH

이 말은 앞으로 선언 된 클래스의 포인터를 사용할 수 있습니다

에 대한 유사

// A.h 
#ifndef A_H 
#define A_H 

// no #include "B.h" 

class B; // forward declaration of B 
class A { 
    B* b; 
}; 

#endif 

(멤버 변수의 선언의 예를, 멤버 함수 선언) , 헤더에서 다른 방법으로 사용하지 마십시오.

그런 다음 A.cpp 당신은 BH의 적절한 정의가 필요합니다, 그래서 당신은 그것을 포함 :

// A.cpp 

#include "A.h" 
#include "B.h" // get the proper definition of B 

// external definitions of A's member functions 

이 건설 유형의 전체 사용을 허용하면서 헤더 파일의 원형을 포함 (투입을 방지 .cpp 파일).

참고 : Bh를 포함 할 때 컴파일러에 A의 적절한 정의가 없기 때문에 기본 int가 지원되지 않는다는 오류가 발생합니다 (C 언어에서는 알 수없는 유형의 기본값 int 정의가 허용되지만 C++)

+0

여기에 하나의 글로 표현 된 베스트 프랙티스 : 모듈의 소스 파일 (이 경우'A.cpp ')의 * first *'# include'파일은 자체 헤더 파일 ('A.h')이어야합니다. 이렇게하면 헤더가 필요로하는 헤더에서 헤더를 가져 오지 않는 문제를 잡아낼 수 있습니다. 누군가가 헤더를 사용하려고 시도하고 정의되지 않은 이름의 오류가 많이 발생할 때까지는 잠복 할 수 있습니다. –

+0

위의 메서드를 사용하여 클래스 A의 클래스 B 객체를 만들 수 있습니다. B * b = new B(); – Kenta

+0

예, 그렇게 할 수 있습니다. – Attila

관련 문제