2009-06-07 5 views
0

프리 컴파일 헤더에 매우 이상한 문제가 있습니다. 링커는 LNK2019 : .cpp 파일에 메서드를 구현할 때 확인할 수없는 외부 기호 오류를 생성합니다. 그러나, .h 파일에 메서드를 구현하면 프로그램을 컴파일 할 수 있습니다. 솔루션을 찾으려고했지만이 오류의 근본 원인에 대해 전혀 알지 못합니다. > 프로젝트 1
- -> 프로젝트 2Visual C++ 링크 LNK2019 미리 컴파일 된 헤더로 오류가 발생했습니다.

프로젝트 1 3 개 파일이

내 프로젝트 구조는이

솔루션
것 같습니다. A.h, A.cpp 및 프로젝트 2에서 STDAFX.H

file A.h 
#pragma once 
class A 
{ 
public: 
    int num; 
    A(); 

}; 

file A.cpp 
#include "stdafx.h" 
    A::A() 
     { 
      num = 2; 
     } 

file stdafx.h 
... 
#include "A.h" 
... 

나는 클래스를 사용하고 싶습니다.

파일 whatever.cpp 컴파일시에

#include "stdafx.h" 
#include "../Project1/A.h" 
... 
    A* a_obj = new A(); 
... 

의 건설 기능에 대한 링커보고되지 않은 외부 기호 오류입니다. A.h 파일에서 생성자를 구현하면. 프로젝트 2가 성공적으로 준수 될 수 있습니다. 왜 A.cpp 파일에 구현을 넣을 수 없는지 알고 싶습니다. 프리 컴파일 헤더를 구성하는 올바른 방법은 무엇입니까? 이 (당신이 한) 헤더 파일의 정의를 포함하는 것입니다 그것을 가시성을 제공하는 한 가지 방법 -

답변

1

프로젝트 2는 생성자의 정의를 포함하지 않는 주셔서 감사합니다.

또 다른 방법은 프로젝트 2.

에서 A.cpp 파일을 포함하는 것입니다 세 번째 방법은 클래스 또는 생성자 .DEF 파일을 사용하거나 dllexport 지시어를 사용하여 수출하는 것입니다. 미리 컴파일 된 헤더 파일에

넣어이 :

// set up export import macros for client project use 
// define the symbol "PROJ1" before including this file in project 1 only 
// leave it undefined for other projects 
#ifdef PROJ1 
#define DLLEXP __declspec(dllexport) 
#else 
#define DLLEXP __declspec(dllimport) 
#endif 

는 그 다음 헤더에있는 클래스를 선언 :

DLLEXP class A 
{ 
    public: 
    A(); 
    ... 
}; 

또는 :

class A 
{ 
    public: 
    DLLEXP A(); 
    ... 
}; 
+0

감사합니다, 두 번째 방법 나를 위해 잘 돌아 간다. – LNK2019

관련 문제