预编译 header 个问题

Precompiled header problems

//........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>

直到今天,我已经跳过 header 中的 #include <standard-lib.h>,将其委托给 Stdafx.h header。

当我在单个项目文件中工作时,这从来都不是问题。

现在我正在尝试添加一个新的 DLL 项目以在一个项目中收集共享代码。

它编译得很好,也生成了 ABC.dll。

有个问题。当另一个使用 ABC.dll 的项目显示编译错误时说 std::vector 不存在。

//...........Another Project using ABC.dll
int main(){
    ABC abc;
}

Error C2039 'vector': is not a member of 'std'

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

也许我误用了预编译的header。

我想知道我对PCH的做法是对还是错。

如有错误,请指点正确的PCH使用方法,不胜感激。

谢谢。

您的问题与预编译 header 无关。一个好的做法是包括当前文件直接使用的所有内容。这将防止对一个 header 文件的包含更改可能需要对使用此 header 的文件中的包含进行更改。 vector 需要包含在 ABC.h 中,因为它直接在那里使用。否则,在包含这个特定库 header.

时,您最终会无休止地努力找出需要包含哪些 header