2014-09-30 1 views
0

나는 모든 것을 주석 처리했으며 코드는 이제 이와 같이 보였다.오류가 발생합니다. 누락되었습니다. before *, 그러나 나는 그것을 놓치지 않고있다.

//AOBSClass.h 

#ifndef __AOBSCLASSHDR__ 
#define __AOBSCLASSHDR__ 

#include "IDriver.h" 
#include "ActuationClass.h" 

namespace AOBS 
{ 
    class AOBSClass 
    { 
    public: 
     AOBSClass(IDriver *driver); 
     ~AOBSClass(); 

     IDriver *drivers; 

     ActuationClass act;  

    private: 

    }; 
} 

#endif 



// ActuationClass.h 

#ifndef __ACTUATIONCLASSHDR__ 
#define __ACTUATIONCLASSHDR__ 

#include "AOBSClass.h" 

namespace AOBS 
{ 
    class ActuationClass 
    { 
    public: 

     ActuationClass(); 
     ~ActuationClass(); 

     AOBSClass *aobs; // This line here 

    private: 

    }; 
} 
#endif 

아래의 오류가 계속 발생합니다. 나는 그것이 무엇을 일으킬 수 있는지 전혀 모른다.

error C2143: syntax error : missing ';' before '*' 
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 

나는 비주얼 스튜디오 익스프레스 2013

+0

식별자 : A는 B가 포함

다른 사람이 언급 한 바와 같이

또한, 등 C가 포함되어 있습니다. –

+0

순환은 논리를 두 클래스로 적절히 구분하지 못했다는 의미입니다. 당신은 이것을 할 필요가 없습니다. – stark

+0

@stark : 이것은 의미 할 수 있습니다. 그렇지 않은 경우에는 여기에있는 것처럼 불필요한 헤더를 포함한다는 의미 일 수 있습니다. –

답변

3

당신은 순환 종속성을 사용하고 있습니다. ActuationClass.h에는 AOBClass.h이 포함되며 그 반대의 경우도 마찬가지입니다.

이 문제를 해결하려면 ActuationClass.h에서 #include "AOBClass.h"을 제거하고 AOBSClass으로 신고하십시오.

namespace AOBS 
{ 
    class AOBSClass;  // Forward declare 
    class ActuationClass 
    { 
    public: 

     ActuationClass(); 
     ~ActuationClass(); 

     AOBSClass *aobs; 

    private: 

    }; 
} 
5

두 파일이 서로 포함됩니다. 그냥 넣어

class AOBSClass; 

ActuationClass.h 시작 부분에.

+5

그리고'#include "AOBSClass.h"'를 제거하십시오. –

3

원형 포함입니다. 두 헤더 파일은 서로를 포함합니다. 일반적으로 포함은 트리 구조처럼 한 방향으로 이동해야합니다. 앞으로 선언이 이런 종류의 도움이 될 수 있습니다 구현에 의해 사용을 위해 예약되어 __` '로 시작하는

관련 문제