2017-09-03 114 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 for vector没有任何用处,它已包含在内。这*实际上没有任何与预编译头文件有关。 –

回答

0

你的问题都无关,与预编译头。一个好的做法是包含当前文件直接使用的所有东西。这将防止包含一个头文件的更改可能需要对使用此头的文件中的包含进行更改。被列入ABC.hvector需求,因为它是直接使用那里。否则,当包含这个特定的库头文件时,你将会无尽地挣扎着找出需要包含哪些头文件。

+0

谢谢。但我想知道为什么MSVC没有在DLL项目中显示关于ABC.h中缺少'vector.h'的任何错误消息。 –

+0

@JaeJunLEE'ABC.cpp'包括'Stdafx.h'包括'VECTOR'。请注意,'ABC.h'只有在包含'vector'后才能包含,因此您设法避开了子弹。 – VTT

+0

好吧,我明白了。谢谢你的回答。 –