2011-03-31 4 views
0

잠시 둘러 보았지만이 문제에 대한 몇 가지 다른 접근법을 시도했지만 여전히 3과 함께 프로그램에서 앞으로 선언문에서 발생하는 과거 오류를 가져올 수 없습니다. 종속 클래스.VC++ 오류를 일으키는 전달 선언, 해결 방법이 확실하지 않음

파일 XH :

#ifndef X_H 
#define X_H 

using namespace std; 

class y; 

class x 
{ 
    private: 
     y *m_oY; 
    public: 
     // constructors &c 
}; 
#endif 

파일 x.cpp :

#include "x.h" 
#include "y.h" 
// Fancy stuff... 

여기에 내 현재 코드의 구조의 추상화 된보기의는 6 개의 파일로 + 1 개 주 프로그램 파일을 분할 파일 yh :

#ifndef Y_H 
#define Y_H 

using namespace std; 

class z; 

class y 
{ 
    private: 
     z *m_oZ; 
    public: 
     // constructors &c 
     z *funcZ() 
}; 
#endif 

파일 y.cpp :

#include "y.h" 
#include "z.h" 
// Fancy stuff... 

파일에서 zh :

#ifndef Z_H 
#define Z_H 

using namespace std; 

class z { ... }; 
#endif 

파일 z.cpp :

#include "z.h" 
// Fancy stuff... 

파일 MAIN.CPP :

#include "z.h" 
#include "y.h" 
#include "x.h" 
#include <iostream> 

using namespace std; 

int main() { ... } 

첫 번째 오류 나는 VS에서 깨끗하고 비 PCH 인 컴파일을 시도한다. Class z를 사용하려고 할 때 구현시에 -ATL 프로젝트가 발생합니다. 오류는 y.h에서 z의 정의를 사용하고 있으며 원형 포함 문제를 만들지 않고이를 해결하는 방법을 모르겠다 고합니다. 오류의 텍스트는 다음과

MAIN.CPP (114) : 오류 C2514를 'Z'클래스에는 생성자

가없는

YH (9) : 'Z'

선언 참조

제가 여기서 잘못하고있는 것에 대한 단서가 있습니까?

+0

확실히 main.cpp는'z.h'에서'z'의 정의를 보지 않고 다른 헤더 파일 중 하나에서'class z;'선언 만 보았습니다. 게시 한 코드가 나에게 잘 보이기 때문에 다른 재미있는 것으로 의심됩니다. 이와 같은 문제를 공격하는 한 가지 방법은 컴파일하지 않고 실행하도록 전 처리기에 지시하는 것입니다. 따라서 모든 #include가 어떻게 처리되었는지 볼 수 있습니다. 나는 Visual C++에서 그렇게하는 방법을 기억하지 못하지만, 아마도 다른 누군가는 그럴 것입니다. – dfan

+0

Z에 생성자가 있습니까? z가 y에 의존하지 않는 것처럼 보이므로 대신 y.h에서 미리 선언문을 제거하고 z.h를 포함하여 시도 했습니까? – forsvarir

+0

오류가 생성자와 관련되어 있으므로'class z '에서 수행 된 작업의 코드를 게시하십시오. 또한 모든 지시어를 소스 파일에 넣으십시오 (즉,'using namespace std;'). 머리글에서 제거하십시오. – Mahesh

답변

2

이것은 전방 선언 문제가 아닙니다. Main.c는 class z의 전체 선언을 볼 수 있습니다. z에는 적어도 적절한 모양의 생성자가 없거나 사적인 것이어야합니다.

+0

나를 헤더 파일을 확인하고 문제를 찾아 주셔서 감사합니다. –

관련 문제