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

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

你们中的任何人对它为什么不能在第一次编译时有任何猜测吗?到目前为止,这并不是一个项目停止器,但我希望将所有供应商API文件保留在它们所属的stdafx.h中。

编辑:问题解决了,我忘记了#ifndef头文件,然后以错误的顺序包括了它们,从而创建了一个循环依赖项。我感觉像个白痴。

最佳答案

stdafx.h主要在VS生成的项目中用作要预编译的 header 的“容器”。

当您将新的#include添加到stdafx.h时,该项目未包括在内,因为您的项目可能已配置为使用预编译的 header ,并且当您向stdafx.h添加内容时,您需要重新生成包含预编译信息的.pch文件。

一种实现方法是在项目中拥有一个.cpp文件,该文件除了#include "stdafx.h"外什么都不做。也许称它为“precompile.cpp”,然后转到该.cpp文件的项目设置并更改以下设置(对于所有配置):

"C/C++ | Precompiled Headers | Precompiled Header" setting

然后选择"Create /Yc"

这将设置构建,以便当需要构建precompile.cpp时(因为它包含的stdafx.h header 已更改),它将重新构建其他所有文件使用的.pch文件。

关于c++ - stdafx.h(和: Why doesn't this work?)的目的,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6772597/

10-13 05:16