预编译头问题

时间:2017-09-03 11:48:40

标签: c++ precompiled-headers

//........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'vector':不是'std'的成员

为了使其正常运行,我必须在消费者的 Stdafx.h 中包含所有库。

也许我一直在滥用预编译的标题。

我想知道我对PCH的处理方式是错还是正确。

如果它错了,如果您建议使用PCH的正确方法,我将不胜感激。

感谢。

1 个答案:

答案 0 :(得分:0)

您的问题与预编译标头无关。一个好的做法是包含当前文件直接使用的所有内容。这将防止包含一个头文件的更改可能需要更改使用此标头的文件中的包含。 vector需要包含ABC.h,因为它直接在那里使用。否则,当你包含这个特殊的库标题时,你最终会无穷无尽地想出要包含哪些标题。