2011-10-14 3 views
0

Visual Studio 2008에 C++ 프로젝트가 있습니다.C++ Visual Studio 2008의 선언되지 않은 식별자

프로젝트에는 여러 가지 양식과 여러 가지 비 형식 클래스가 있습니다. 하나의 비 형식 (특히, Import_LP.h라고 불리는)은 리소스 파일에 헤더 파일에 아무것도 쓰여지지 않은 여러 가지 메소드를 가진 클래스입니다.

나는 폼 클래스의에 사용법 #include Import_LP 아무 문제가 없으며 객체를 생성하고 그 방법, 나는에 그것을 #include를하려고하지만 다른 클래스 중 하나를 참조, 그것은 나에게

syntax error : undeclared identifier 'Import_LP' 
제공 즉 참조되는 행의

이 발생합니다. 즉, Import_LP^importLP;

내가 자바/C# 배경에서 왔는데 여기에 링크가없는 것이 있습니까?

답변

1

가드를 포함하면 다음과 같이됩니다. 전 처리기에 "단 한번만 포함하십시오"라는 Import_LP.h가 포함 된 다음 Import_LP.h를 포함하려고하는 Window.h가 포함되지만 포함되지 않으므로 포함 가드의 따라서 Window.h는 창 클래스를 파싱하기 시작하지만 Import_LP 때문에 실패합니다.h 클래스 헤더가 아직 완전히로드되지 않았습니다.

Window.h :

#ifndef WINDOW_H //works best if this is first 
#define WINDOW_H 
#pramga once 

class Import_LP; 
class Window { 
    Import_LP* member; //member has to be a pointer 
    void func(); 
}; 
#include "Import_LP.h" 
inline void Window::func() { 
} 
#endif WINDOW_H 

Import_LP.h :

#ifndef IMPORT_LP_H //works best if this is first 
#define IMPORT_LP_H 
#pramga once 

class Window; 
class Import_LP { 
    void func(Window& parent); //parameter has to be a pointer or reference 
}; 
#include "Window.h" 
inline void Import_LP::func(Window* parent) { 
} 
#endif IMPORT_LP_H 

이것은 단지 당신이 포인터에 의해 다른를 참조 할 수 있습니다 또는

해결책은 클래스를 미리 선언하는 것입니다 실제 포함될 때까지 참조하지만 실행 가능해야합니다. 엄밀히 말하면 하나 또는 다른 헤더에만이 작업을 수행하면됩니다.

0

유형 Import_LP와 같은 소리는 정의되지 않았습니다. 이유는 알아내는 것입니다. 먼저 import_LP.h의 내용을 읽고 Import_LP가 어떻게 선언되는지 알아 내야합니다. 가능한 한 가지 방법은 좋은 파일 중 하나를 열고 Import_LP를 마우스 오른쪽 단추로 클릭하고 "Go To Declaration"을 선택하는 것입니다. 특정 사례에 적용되는 Import_LP 선언에 초점을 이동해야합니다.

#ifdef로 둘러 쌓여 선언이 다른 파일에서 컴파일되지 않도록 할 수 있습니다. 아니면 뭔가 다른 것일 수도 있습니다. 실제로 작업 할 세부 정보가 충분하지 않습니다.

업데이트 :

를 그래서 분명히 당신이 할 수없는 두 개의 파일이 서로 포함되어 있습니까? . . . 누군가가 내게 왜 을 설명 할 수 없으면 감사 할 것입니다.

이렇게하면 형식과 변수를 두 번 이상 정의 할 수 있습니다.

이러한 종류의 문제를 완화하는 데 사용할 수있는 #include guard#pragma once과 같은 기술이 있습니다.

+0

답장을 보내 주셔서 감사합니다. 마우스 오른쪽 클릭 -> 객체 선언 Import_LP ^에서 선언을 찾을 때 #include Import_LP ^를 사용하면 올바른 클래스를 올바르게 가리킬 수 있습니다. 다른 좋은 파일과 똑같은 방식으로 선언하고 포함 시켰습니다. 또한 해당 파일에 #ifdef가 사용되지 않습니다. 이 Import_LP.h 의 시작 부분에 선언이다의 #pragma 번 #ifndef IMPORT_LP_H #DEFINE IMPORT_LP_H – ped

+0

당신이 #INCLUDE "Import_LP.h을"이 없으십니까? – crashmstr

1

무작위로 문제를 해결할 수있었습니다.

그래서 분명히 두 파일이 서로 포함될 수 없습니까? 내가 Import_LP.h

Window.h에서
#include Import_LP.h 

#include Window.h 

을하고 있었다

.

누군가 내가 왜 이렇게 할 수 없는지 설명해 주시면 감사하겠습니다.

+0

답변에 문제 및 해결 방법에 대한 전체 설명을 기재했습니다. –

관련 문제