如何避免预编译头文件
Posted
技术标签:
【中文标题】如何避免预编译头文件【英文标题】:How to avoid precompiled headers 【发布时间】:2011-08-31 18:32:49 【问题描述】:我正在尝试用 C++ 编译一个简单的 VS 程序作为类的作业。我们只包含 <iostream>
并且我不断收到此错误:
1>Assignment.cpp(15): 致命错误 C1010: 查找预编译头时文件意外结束。您是否忘记将
'#include "StdAfx.h"'
添加到您的来源?
我的程序真的这么小......
#include <iostream>
using namespace std;
int main()
unsigned int day = 30;
cout << "My Name is John Doe" << endl;
cout << "My Major is CS" << endl;
cout << "I was born on day " << day << endl;
return 0;
我刚刚安装了 Visual Studio Express 2010。我真的很想开始一个空项目,而不是安装所有这些预定义的文件,我认为这会更容易,但我在创建项目时从来没有得到这个选项。有人有什么建议吗?
【问题讨论】:
您需要在项目的设置中关闭使用预编译头文件(您也可以在以后创建新项目时取消选中使用预编译头文件。) 我该如何为未来的项目关闭此功能? 请改进您的问题标题。它并没有非常详细地描述这个问题,而是列出了技术(这就是标签的用途)。 我获得了项目属性,但没有看到预编译的标头。它在语言属性中? 查看 C/C++ -> Precompiled Headers. 【参考方案1】:您始终可以在项目设置中禁用预编译头文件的使用。
VS 2010 使用说明(其他版本的 VS 应该类似):
选择您的项目,使用“项目 -> 属性”菜单并转到“配置属性 -> C/C++ -> 预编译头”部分,然后将“预编译头”设置更改为“不使用预编译头”选项。
如果您只是想为简单的 C++ 命令行程序(例如在介绍性 C++ 编程课程中开发的程序)设置一个最小的 Visual Studio 项目,您可以创建一个empty C++ project。
【讨论】:
@Howdy_McGeestd::cout << "Press Enter To Continue" << std::endl; std::cin.get();
应该会带你到那里。
@André:“Win32 项目”和“Win32 控制台应用程序”模板还提供了禁用预编译头文件的选项。无论如何,我的观点是,由于他的问题与预编译头文件有关,而预编译头文件与标准合规性是正交的,因此提出标准合规性是一种误导。
@ildjarn:但问题不在于预编译的头文件。真正的问题是 OP 在项目向导对话框中选择了错误的项目类型和/或选项。由于 OP 使用看似简单的标准 C++ 编写学校作业,因此最有助于养成在 Visual Studio 中编写符合标准的 C++ 程序的良好习惯的项目类型是空项目类型。因此,我提到了标准合规性。
@André: traits::eof()
真的,不是-1
。
Downovote 的工具提示说:“这个答案没用”。那当然是相对的。同样,downvote 可以随时撤销。感谢您改进答案。【参考方案2】:
您可以通过从 Visual C++ 项目的“常规”组中选择“空项目”来创建一个空项目(也许 Express 中不包含该项目模板?)。
要解决您已有项目中的问题,请打开项目属性并导航到:
Configuration Properties | C/C++ | Precompiled Headers
并为“Precompiled Header”选项选择“Not using Precompiled Headers”。
【讨论】:
根据msdn.microsoft.com/en-us/library/ms235516%28v=VS.100%29.aspx,Empty Project 模板在 Express 中。让我知道它是否不显示给你。我发现它比任何其他项目模板更适合用于设置快速、简单、小型、独立的测试项目。【参考方案3】:.cpp
文件配置为使用预编译头,因此必须首先包含它(在 iostream 之前)。对于 Visual Studio,它的名称通常是“stdafx.h”。
如果您的项目中没有 stdafx* 文件,您需要进入该文件的选项并将其设置为“不使用预编译头文件”。
【讨论】:
如何关闭预定义的标题? 右键单击.cpp文件并选择属性,然后在树形视图中找到C/C++ / Precompiled Headers并更改Precompiled Header选项。 批量选择尝试在#include "iostream"
之前添加#include "stdafx.h"
【讨论】:
这是一个课堂作业——我只能使用 iostream,所以这个解决方案不起作用 @Howdy:从技术上讲,谢尔盖是正确的;您已经创建了一个使用预编译头文件的项目集,但您没有#include
它。您真正需要做的是创建一个空项目或消除对预编译头文件的依赖。
@Ed S.:虽然是对的,但只是治标不治本。隐藏的问题是“为什么我不能编译我在课堂上编译的同一个程序”? 那个问题的答案是“在课堂上,项目没有使用预编译的头文件”。以上是关于如何避免预编译头文件的主要内容,如果未能解决你的问题,请参考以下文章