2017-09-03 5 views
0
//........Project for ABC.dll 
//ABC.h 
#pragma once 
class ABC{ 
public: 
    ABC(){} 
private: 
    std::vector<int> m_vector; 
}; 

//ABC.cpp 
#include "Stdafx.h" 
#include "ABC.h" 

//Stdafx.h 
#include <vector> 

오늘 틸, 나는 Stdafx.h에 헤더에 위임하여 내 헤더에 #include <standard-lib.h>을 생략했습니다.미리 컴파일 된 헤더 문제

단일 프로젝트 파일에서 작업 한 적이 한번도 문제가되지 않았습니다.

이제 한 프로젝트에서 공유 코드를 수집하기 위해 새 DLL 프로젝트를 추가하려고합니다.

컴파일이 잘되고 ABC.dll도 생성되었습니다.

여기에 문제가 있습니다. ABC.dll을 사용하는 다른 프로젝트가 std::vector이라는 컴파일 오류를 표시하면 존재하지 않습니다.

//...........Another Project using ABC.dll 
int main(){ 
    ABC abc; 
} 
C2039 '벡터'

오류 : 나는 너무 소비자의 Stdafx.h에에있는 모든 라이브러리를 포함했다 '표준'

, 그것은 작업을 진행하기의 구성원이 아닌 .

아마 내가 미리 컴파일 된 헤더를 오용했습니다.

내가 PCH로하고있는 방식이 잘못되었거나 옳았는지 알고 싶습니다.

잘못된 경우 PCH를 사용하는 올바른 방법을 제안하면 감사하겠습니다.

감사합니다.

+0

마지막 스 니펫에'#include '이 누락되었습니다. ABC.h를 컴파일하기 위해 필요한 것. stdafx.h에 포함 되었기 때문에 당신은 전에 이것을 깨닫지 못했습니다. 또한 첫 번째 스 니펫의 #include는 아무 것도하지 않고 이미 포함되어 있습니다. * 실제로 * 미리 컴파일 된 헤더와 아무 관련이 없습니다. –

답변

0

문제는 미리 컴파일 된 헤더와 관련이 없습니다. 좋은 방법은 현재 파일이 직접 사용하는 모든 것을 포함시키는 것입니다. 이렇게하면 하나의 헤더 파일에 포함 된 내용의 변경으로 인해이 헤더를 사용하는 파일의 include에 변경 사항이 필요할 수 있습니다. 은 ABC.h에 직접 포함되어 있기 때문에 포함해야합니다. 그렇지 않으면이 특정 라이브러리 헤더를 포함 할 때 어떤 헤더를 포함해야하는지 파악하기 위해 끊임없이 노력해야합니다.

+0

감사합니다. 하지만 왜 MSVC DLL 프로젝트에서 ABC.h에'vector.h '가 빠져 있다는 오류 메시지가 표시되지 않았는지 궁금합니다. –

+0

@JaeJunLEE'ABC.cpp'는'vector'를 포함하는'Stdafx.h'를 포함하고 있습니다. 'ABC.h'는'vector'가 포함 된 후에 만 ​​포함되므로 총알을 피할 수 있습니다. – VTT

+0

알겠습니다. 답변 해 주셔서 감사합니다. –

관련 문제