2009-08-15 4 views
1

을 볼 때 정의되지 않는 : 글로벌 구조체는

#ifndef CLASS_H_ 
#define CLASS_H_ 

#include "Class2.h"  
#include <iostream> 

struct Struct1{ 
}; 

struct Struct2{ 
}; 

class Class1 { 
}; 

#endif 

Class.h

을 내가 이것을 사용 그리고 다른 헤더 파일 :이 같은 디렉토리에

#ifndef CLASS2_H_ 
#define CLASS2_H_ 

#include "Class.h" 

class Class2 { 
    public: 
     Class2(Struct1* theStruct, Struct2* theStruct2); //Can't find struct definitions 
    private: 
}; 

#endif 

합니다. 그리고 그 구조체 정의가 보이지 않습니다! 그들은 내게 세계적인 범위에있는 것처럼 보입니다. 누군가 Class2가 그들을 볼 수없는 이유를 설명 할 수 있습니까? 컴파일러는 Class의 헤더를 찾지 못한다고 불평하지 않기 때문에 그렇게 할 수 없습니다.

+0

전체 코드가 아닌 것 같습니다. 정확한 코드를 사용해 보셨습니까? ' '은 어디에 사용됩니까? –

+0

포인터가 변경되었습니다. – Alex

+0

전체 코드가 포함되었습니다. – Alex

답변

4

다음은 전체 코드의 추측입니다. 게시 해 주시면 더 잘 도와 드리겠습니다.


당신의 전체 코드는 다음 다음과 같습니다 혹시 당신은

#ifndef CLASS_H_ 
#define CLASS_H_ 

#include <iostream> 
#include "Class2.h" 

struct Struct1{ 
}; 

struct Struct2{ 
}; 

class Class1 { 
}; 

#endif 

Class2.h의 다른 헤더는 않을 것이라고 CLASS_H_ 매크로가 이미 정의 될 것이기 때문에 변경해야하는 경우 다른 시간이 포함 된 다음 그 당시 Struct1Struct2은 아직 알 수 없습니다. 가능하면 forward 선언을 사용하여 문제를 해결하십시오. Class2.h 예를 들어 : 다른 헤더 중 하나 Class2의 정의를 필요로하지 않는 경우

#ifndef CLASS2_H_ 
#define CLASS2_H_ 

// no need for that file 
// #include "Class.h" 

// forward-declarations suffice  
struct Struct1; 
struct Struct2; 

class Class2 { 
    public: 
     Class2(Struct1 theStruct, Struct2 theStruct2); 
    private: 
}; 

#endif 

후가 너무 앞으로 선언을 사용합니다. 정의는 정의

당신이 멤버에 액세스 할 경우 필요할 수없는 함수 선언에서 (선언이 충분 IE)

  • 참조 및 포인터
  • 함수 매개 변수 필요하지 않습니다 sizeof을 얻거나 Class2, Struct1 등의 매개 변수 유형을 갖는 함수를 정의하려고합니다.

+0

선생님, 심령입니다. 그런 다음 클래스에 Class2를 저장하려는 경우 어떻게 헤더 파일에서 참조 할 수 있습니까? – Alex

+0

당신은 다음 헤더를 포함해야합니다 :)하지만 다음, 당신은 그 다음 다른 헤더에서 헤더를 필요가 없도록 관리해야합니다 동그라미를 깰 수 :) 휴식 수없는 경우, 당신은 포인터를 사용해야합니다 .cpp 파일의 오브젝트를'new'로 할당하십시오. 'shared_ptr'을 사용해보십시오 :) –