stdafx.h的目的(和:为什么这不起作用?)

时间:2011-07-21 07:21:46

标签: c++ windows visual-studio-2010

我正在开发一个拥有供应商提供的API的项目。我已经在我的项目中创建了一个使用该API的类,并且我在我的stdafx.h文件中包含了vendor头文件。事情不会编译。

然后我将#include直接放入我的类'头文件中,现在编译好了(是的,我的班级包括stdafx.h,所以这不是原因。

你们有没有猜测为什么第一次不能编译?到目前为止,这不是一个项目阻止者,但我更愿意,如果我可以将所有供应商API文件保存在stdafx.h中。

编辑:问题解决了,我通过忘记#ifndef头文件然后以错误的顺序包含它们来创建循环依赖。我觉得自己像个白痴。

2 个答案:

答案 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文件。