我正在开发一个有供应商提供的API的项目。 我做了一个在我的项目中使用这个API的类,并且在我的stdafx.h文件中包含了供应商的头文件。 事情不会编译。
然后,我把#include直接放到我的类的头文件中,现在编译(是的,我的类包含了stdafx.h所以不是原因。
你们有没有猜测为什么它不会第一次编译? 这不是一个项目,但我宁愿如果我可以保留所有供应商的API文件在他们所属的stdafx.h。
编辑:问题解决了,我创build了一个循环依赖忘记#ifndef头文件,然后包括他们在错误的顺序。 我觉得自己像一个白痴。
stdafx.h主要用在VS生成的项目中,作为预编译头文件的“容器”。
当你向stdafx.h添加一个新的#include ,它并没有被包含,因为你的项目可能被配置为使用预编译的头文件,当你向stdafx.h添加一些东西时,你需要重新生成包含预编译信息的.pch文件。
一种方法是在你的项目中有一个.cpp文件,除了#include "stdafx.h"什么也不做。 也许称它为“precompile.cpp”,然后转到该.cpp文件的项目设置并更改以下设置(对于所有配置):
"C/C++ | Precompiled Headers | Precompiled Header" setting
并选择"Create /Yc" 。
这将设置构建,以便当需要构建precompile.cpp (因为它包含的stdafx.h头已更改)时,它将重建所有其他使用的.pch文件。
编辑:等等 – 我不认为我正确地读这个问题。 虽然可能仍然有帮助。
stdafx.h另一个名字是“预编译头文件”
stdafx.h中没有任何“供应商细节”,它只是预编译头文件,以便编译器在每次构建项目时不必重新编译它们。
如果你有一个巨大的项目(或者包含大量头文件的小项目),这只是非常有用的。
我也使用Visual Studio 2010,通常这是不值得大惊小怪 – 我只是禁用它(这也将解决您的类包含问题 – 制作自己的标题,坚持供应商在那里)。