我理解预编译的头文件正在使用“#include”StdAfx.h“并且是的,我知道我可以关闭它们。但这不是我的问题。
如果您正在使用预编译头文件,则Visual C ++需要每个 cpp文件#include“StdAfx.h”,甚至是不使用StdAfx.h中任何头文件的文件。如果您忘记在一个文件中包含StdAfx.h,则会出错。但为什么?显而易见的方法就是“如果你包含StdAfx.h,那么该文件将使用它,但是如果你忘记包含它,那么那些头文件就不会被包含在内。”我不明白为什么VC ++会要求你在不需要的时候包含StdAfx.h。似乎它们更容易像普通的头文件一样对待它。
有什么理由需要这个吗?
答案 0 :(得分:10)
答案 1 :(得分:9)
您的项目默认为"使用预编译的标题"。您可以将单个文件设置为"不使用预编译的标题"如果你愿意的话。
实际上,stdafx.cpp
本身与项目默认值有不同的选项:
这个配置说的是"开始编译这个文件(stdafx.cpp),当你完成编译包含stdafx.h的语句时停止"并将预编译的信息保存为.pch文件。" Visual Studio也足够智能,可以先编译该文件,以便可以使用。
项目默认值为:
这个配置说的是"对于每个编译的文件,从指定的.pch中的预编译数据开始,并在包括stdafx.h之后开始编译新信息。& #34;这很重要,为什么stdafx.h应作为文件的第一行包含在内。如果你稍后将它放在文件中,它仍然可以工作,但#include之前的任何内容都会被忽略,因为这些数据不会出现在.pch中。没有#include意味着VS将扫描整个文件,寻找预编译的起始位置而不是找到它......产生错误。
如果您有一个不想使用预编译信息的文件,则可以选择该文件并覆盖它。例如:
Visual Studio不会使用预编译的信息,也不会寻找要包含的标题。
答案 2 :(得分:0)
选择文件后,右键单击属性,转到“ C / C ++ \ Precompiled标头”部分,并将“ Precompiled标头”设置为“不使用预编译标头”,请确保配置(左上方)为适用于当前选定的版本。
它并不总是自动选择“活动”配置。因此您可以将选项设置为非活动配置,这样您将继续遇到错误;)