2012-05-31 2 views
0

내가 구현하는 클래스 세트를하고 난 다음과 같은 방법으로 그것을 할 계획 :스태킹 여러 앞으로 선언

이 (1) 마스터 헤더 파일 (entity.h)이있다

네임 스페이스 즉 안에이 모든 클래스 전방 선언 :

namespace SomeNameSpace { 
    class A; 
    ... 
    class E; 
} 

(2) 각각의 클래스 다음 별도의 헤더 파일을 (예 : 아, BH) 클래스를 정의하고 모든 구성 변수와 메소드를 선언 .

(3) 마지막으로 .cpp는 모든 구성원과 통계 (예 : A.cpp, B.cpp)를 정의합니다.

이제이 스키마를 #include "entity.h"을 실행하여 작동 시키려고했으나 이러한 클래스 중 하나를 사용하려고 할 때마다 "모호성"오류가 발생했습니다. (1) 단계를 건너 뛰고 단순히 각 클래스의 모든 개인 헤더 파일을 포함한다면, 나는 그 문제가 없다. (그것이 내가 코드를 작성한 방법이다.)

어쨌든 내 계획이 실행 가능합니까? 그것을 작동시키는 방법이 있습니까? 필자가 정말로 원했던 것은 모든 사용자 정의 객체를 하나의 네임 스페이스에 넣을 수있는 방법을 찾는 것입니다. 나는 모든 클래스 선언을 하나의 파일에 두는 것으로 그 작업을 할 수 있다고 생각하지만, 엔티티가 부풀어 오르게 만들 것입니다.

키워드 "forward 선언", "C++", "네임 스페이스", "하나의 네임 스페이스", "마스터 헤더", "헤더"로 검색 한 결과 매우 관련성이있는 항목을 찾을 수 없었습니다. 어쩌면 내가하고 싶은 일이 잘못된 것일까?

답변

2

"class A"를 사용할 수 없습니다. 귀하의 entity.h에 실제로 당신이 클래스를 선언하는 것을 의미하기 때문에 이미 Ah에서 완료했습니다. 전체 선언을 entity.h에 추가 할 수 있지만 Ah, Bh 등은 사용하지 마십시오. 또는 단지 각 * .H 파일에서 같은 네임 스페이스를 사용 아 -> 네임 스페이스 SomeNamespace { 클래스 A ... }

BH -> 네임 스페이스 SomeNamespace { 클래스 B ... }

+0

시원한. 이름이 다른 네임 스페이스가 다른 클래스에서 허용된다는 것을 알지 못했습니다. 나는 그것을 시도 할 것이다. 편집 : B가 B에서 동일한 네임 스페이스를 사용하는 B.h에서 A 클래스를 사용해야하는 경우 어떻게해야합니까? Visual Studio에서는 자동으로 SomeNameSpace를 사용한다고 가정하므로 SomeNameSpace :: B를 사용할 필요가 없습니다.비주얼 스튜디오는 사용자에게 뭔가 잘못되었다는 것을 즉시 알리지 않는 경향이 있기 때문에 (컴파일 타임에 관한 문제조차도) 확인을 요구하고 있습니다. –

+1

흠 음 네가 네 이름 공간 안에 있니? –

+0

그래, 내 C++ 책은 그것에 대해 아무 말도하지 않았다. :/ 팁 주셔서 감사합니다. –

1

완전한 정의가없는 범위에서 클래스를 사용할 수 없습니다 (전달 선언으로는 충분하지 않음). 일반적으로 헤더에서 선언하고 cpp에서 #include를 전달할 수 있습니다. 나는 너가 시도하고있는 방법을 조직 할 때 요점을 보지 않는다; 정식적 인 지혜는 가능할 때 언제든지 선언하고 필요할 때마다 #include하는 것입니다.

아 :

namespace SomeNameSpace { 
    class A{ 
     // Class definition 
     void something(); 
    } 
} 

A.cpp :

2

다른 접근 방법은 예를 들어, 그들을 포함하여 다음 원래 헤더에서 직접 네임 스페이스에 클래스를 포장 될 것이다

#include "A.h" 
namespace SomeNameSpace { 
    void A::something() 
    { 
    } 
    // And other function definitions 
} 

entity.h :

#include "A.h" 
#include "B.h" 
// And so on...