如何避免预编译头


71

我正在尝试用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 Express2010。确实,我很想启动一个空项目,而不是使用所有预定义的文件进行安装,我认为这样会使它容易得多,但是在创建项目时我从来没有得到这个选项。有人有什么建议吗?


11
您需要在项目的设置中关闭对预编译头文件的使用(您还可以在以后创建新项目时取消选中“使用预编译头文件”。)
user168715 2011年

如何为将来的项目关闭此功能?
2011年

请改善您的问题标题。它并不是很刻意地描述问题,而是列出了技术(这是什么标签)的。
Lightness Races in Orbit

我有项目属性,但没有看到预编译的标题。它在语言属性中吗?
2011年

2
在C / C ++->预编译标题下查看。
user168715

Answers:


101

您始终可以在项目设置中禁用预编译头的使用。

VS 2010的说明(其他VS版本应与此类似):

选择您的项目,使用“项目->属性”菜单,然后转到“配置属性-> C / C ++->预编译头”部分,然后将“预编译头”设置更改为“不使用预编译头”选项。


如果仅尝试为简单的C ++命令行程序(例如在C ++编程入门类中开发的程序)设置最小的Visual Studio项目,则可以创建一个空的C ++项目


2
@Howdy_McGeestd::cout << "Press Enter To Continue" << std::endl; std::cin.get();应该可以带您到那里。
汤姆·克尔

1
@André:“ Win32项目”和“ Win32控制台应用程序”模板还提供了禁用预编译头的选项。无论如何,我的观点是,由于他的问题与预编译的标头有关,并且预编译的标头与标准合规性正交,所以完全提倡标准合规性是一种误导。
ildjarn 2011年

2
@ildjarn:但是问题不在于预编译的头文件。真正的问题在于OP在项目向导对话框中选择了错误的项目类型和/或选项。由于OP用普通的标准C ++编写学校作业,所以最有助于养成在Visual Studio中编写符合标准C ++程序的良好习惯的项目类型是空项目类型。因此,我提到了标准合规性。
安德烈·卡隆

2
@André:traits::eof()真的,不是-1
Lightness Races in Orbit

1
Downovote的工具提示说:“此答案没有用”。那是相对的。同样,downvote可以随时恢复。感谢您改善答案。
托马什Zato -恢复莫妮卡

9

您可以通过从Visual C ++项目的“常规”组中选择“空项目”来创建一个空项目(也许该项目模板未包含在Express中?)。

要解决现有项目中的问题,请打开项目属性并导航至:

Configuration Properties | C/C++ | Precompiled Headers

然后为“预编译头”选项选择“不使用预编译头”。


根据msdn.microsoft.com/zh-cn/library/ms235516%28v=VS.100%29.aspx,Empty Project模板位于Express中。让我知道它是否不适合您。我发现它比其他任何项目模板都更可取,它可以用于设置快速,简单,独立的测试项目。
迈克尔·伯

5

.cpp文件配置为使用预编译头,因此必须首先包含它(在iostream之前)。对于Visual Studio,它的名称通常是“ stdafx.h”。

如果项目中没有stdafx *文件,则需要转到该文件的选项,并将其设置为“不使用预编译头”。


如何关闭预定义的标题?
2011年

右键单击.cpp文件,然后选择“属性”,然后在树视图中找到“ C / C ++ /预编译头”,然后更改“预编译头”选项。
hamstergene

质量选择<CTRL> +鼠标左键选项也很方便。在解决方案资源管理器中选择一堆cpp源文件,然后如上所述关闭。
Laurie Stearn '18

-1

尝试添加#include "stdafx.h"之前#include "iostream"


这是一个班级分配-我只被允许使用iostream,所以该解决方案将不起作用
Howdy_McGee 2011年

1
@Howdy:从技术上讲,谢尔盖是正确的;您已经创建了一个使用预编译头的项目集,但是您没有#include。您真正需要做的是创建一个空项目或消除对预编译头文件的依赖。
Ed S.

@Ed S .:尽管正确,但只能解决症状。隐藏的问题是“为什么我不能编译在课堂上编译的相同程序”?这个问题的答案是“在课堂上,项目没有使用预编译的标头”。
安德烈·卡隆

-1

右键单击项目解决方案

属性->配置属性-> C / C ++->预编译头

  1. 单击“预编译头”,更改为“不使用预编译头”。

  2. 在项目构建结束时,擦除EOF错误的“预编译头文件”中的“ pch.h” /“ stdafx.h”字段。

  3. 然后,您可以随意删除pch。/ stdafx。项目中的文件

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.