C++ 包含预编译标头时出错
我正在使用Windows7上的VisualStudio2010为控制台应用程序编写代码。我已经包括了在本程序中使用的库,但是当我仅使用头文件构建程序时,它无法包括“stdafx.h”头文件。这是我的密码C++ 包含预编译标头时出错,c++,visual-studio-2010,C++,Visual Studio 2010,我正在使用Windows7上的VisualStudio2010为控制台应用程序编写代码。我已经包括了在本程序中使用的库,但是当我仅使用头文件构建程序时,它无法包括“stdafx.h”头文件。这是我的密码 #include "stdafx.h" #include "stgetriggersample.h" int _tmain(int argc, _TCHAR* argv[]) { return 0; } 我得到这个错误: error C1189: #error : "include
#include "stdafx.h"
#include "stgetriggersample.h"
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
我得到这个错误:
error C1189: #error : "include 'stdafx.h' before including this file for PCH"
“stdafx.h”头文件存在于我的当前目录中
更新
“stgetriggersample.h”的内容是
“stdafx.h”的内容是:
//stdafx.h:标准系统包含文件的包含文件,
//或特定于项目的包含经常使用的文件,但
//变化不大
//
#布拉格语一次
#包括“targetver.h”
#包括
#包括
//TODO:在此处引用程序所需的其他标题
我尝试使用选项编写代码,但没有使用预编译头,但仍然得到相同的错误
如何纠正这一点。谢谢也许你一直在努力解决这个问题,事实上,你弄坏了什么东西。让我们了解一下Visual Studio中预编译头用法的正确配置(我将使用VS2012中的选项名称):
配置属性的使用
->C/C++
->预编译头
->预编译头
->使用(/Yu)
配置属性->C/C++
->预编译头
->预编译头文件
。在您的例子中,您应该看到标准的PCH名称(stdafx.h
)。如果你愿意,你可以改变
.cpp
文件(因为只能编译源文件)。在您的情况下,您的项目附加了默认的stdafx.cpp
。用RMB点击它,然后:配置属性
->C/C++
->预编译头
->预编译头
->创建(/Yc)
#include "PCH_NAME"
其中,PCH\u NAME
是步骤2中设置的预编译头的名称
以这种方式设置所有这些设置后,我建议您:
输出目录
和中间目录
的项目属性路径。删除它们(我希望它们不包含任何代码-它们不应该)your solution name-cc50b4e6
的文件夹。删除它后备位置,它将被放置在那里。在代码中:
#ifndef __AFXWIN_H__
#include"stdafx.h"
#error "include 'stdafx.h' before including this file for PCH"
#endif
看起来StGETriggerSample.h正在检查stdafx.h是否已通过查找编译保护宏AFXWIN_h_____包含在内。然而,stdafx.h实际上并没有定义这个guard宏,它只是依赖station“#pragma once”来避免多个包含项。因此,即使包含stdafx.h,也将始终触发#error语句
要修复此问题,请添加编译保护
#ifndef __STDAFX_H__
#define __STDAFX_H__
// ... yadda yadda yadda...
#endif // __STDAFX_H__
到你的stdafx.h。如果愿意,可以从stdafx.h中删除#pragma once语句,但这不是必需的
另一方面,如果尚未包含stdafx.h,那么代码也试图包含它,但无论如何都会导致编译错误。我很确定你只想做一个或另一个…重建?还是先清理然后构建?@thinkerou这样做没有效果。那么stdafx.cpp
呢?它在你的项目中吗?目录中存在h文件不仅是要求,stdafx.cpp
必须在项目中编译(您必须在项目浏览器中查看stdafx.cpp
和stdafx.h
),stdafx.cpp也在那里@VolAndIt希望您在stdafx.h文件中包含MFC头。在第一步中,您建议使用(/Yu),在第三步中,您建议创建(/Yc)。这两者的区别是什么。按照您的描述进行纠正后,我的问题没有得到解决。请帮帮我,你没有仔细阅读<必须为项目设置代码>使用(/Yu)
<必须为负责PCH生成的.cpp
文件设置code>Create(/Yc)。“在您的情况下,您的项目已附加默认stdafx.cpp。请用人民币[…]单击它。”。它指的是.cpp
文件,而不是project。Mark Morrison我已经按照您的建议添加了编译保护,但仍然没有区别。我是否需要删除或添加任何其他内容。
#ifndef __AFXWIN_H__
#include"stdafx.h"
#error "include 'stdafx.h' before including this file for PCH"
#endif
#ifndef __STDAFX_H__
#define __STDAFX_H__
// ... yadda yadda yadda...
#endif // __STDAFX_H__