我正在开发一个拥有供应商提供的API的项目。我已经在我的项目中创建了一个使用该API的类,并且我在我的stdafx.h
文件中包含了vendor头文件。事情不会编译。
然后我将#include
直接放入我的类'头文件中,现在编译好了(是的,我的班级包括stdafx.h
,所以这不是原因。
你们有没有猜测为什么第一次不能编译?到目前为止,这不是一个项目阻止者,但我更愿意,如果我可以将所有供应商API文件保存在stdafx.h中。
编辑:问题解决了,我通过忘记#ifndef头文件然后以错误的顺序包含它们来创建循环依赖。我觉得自己像个白痴。答案 0 :(得分:1)
编辑:等等 - 我认为我没有正确地阅读这个问题。不过可能还是有帮助的。
stdafx.h
的另一个名称是'预编译头'
stdafx.h
中并没有真正的'供应商细节',它的作用是预编译头文件,这样编译器就不必在每次构建项目时重新编译它们。
如果你有一个庞大的项目(或一个包含大量标题的小项目),它才真正有用。
我也使用visual studio 2010,一般不值得大惊小怪 - 我只是禁用它(这也可以解决你的类包含问题 - 制作你自己的标题,坚持供应商在那里)。
答案 1 :(得分:1)
stdafx.h
主要用于VS生成的项目中,作为要预编译的标题的“容器”。
当您向#include
添加新的stdafx.h
时,它未被包含在内,因为您的项目可能已配置为使用预编译的标头,并且当您向stdafx.h
添加内容时,您需要重新生成包含预编译信息的.pch文件。
这样做的一种方法是在项目中使用.cpp文件除了#include "stdafx.h"
之外什么都不做。也许称之为`precompile.cpp'。然后转到项目设置获取该.cpp文件并更改以下设置(适用于所有配置):
"C/C++ | Precompiled Headers | Precompiled Header" setting
并选择"Create /Yc"
。
这将设置构建,以便在需要构建precompile.cpp
时(因为它包含的stdafx.h
标题已更改),它将重建其他所有内容使用的.pch文件。