查找预编译头文件时跳过

Posted

技术标签:

【中文标题】查找预编译头文件时跳过【英文标题】:skipped when looking for precompiled header 【发布时间】:2010-05-31 21:11:22 【问题描述】:

所以出于某种原因,我的 .cpp 文件缺少它的头文件。但我没有在其他任何地方包含头文件。我刚开始,所以我检查了我制作的所有文件

enginuity.h

#ifndef _ENGINE_
#define _ENGINE_

class Enginuity


public:
    void InitWindow();

;

enginuity.cpp

#include "Enginuity.h"


void Enginuity::InitWindow()



main.cpp

#include "stdafx.h"
#include "GameProject1.h"

#define MAX_LOADSTRING 100

// Global Variables:
HINSTANCE hInst;                                // current instance
TCHAR szTitle[MAX_LOADSTRING];                  // The title bar text
TCHAR szWindowClass[MAX_LOADSTRING];            // the main window class name

// Forward declarations of functions included in this code module:
ATOM                MyRegisterClass(HINSTANCE hInstance);
BOOL                InitInstance(HINSTANCE, int);
LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);

int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)


code.....
#endif

不知道发生了什么。我得到的错误是

1>c:\users\numerical25\desktop\intro todirectx\gameproject\gameproject1\gameproject1\enginuity.cpp(1) : warning C4627: '#include "Enginuity.h"': skipped when looking for precompiled header use
1>        Add directive to 'stdafx.h' or rebuild precompiled header
1>c:\users\numerical25\desktop\intro todirectx\gameproject\gameproject1\gameproject1\enginuity.cpp(8) : fatal error C1010: unexpected end of file while looking for precompiled header. Did you forget to add '#include "stdafx.h"' to your source?

【问题讨论】:

【参考方案1】:

您是否阅读了错误信息?

致命错误 C1010:查找预编译头时文件意外结束。您是否忘记在源代码中添加“#include "stdafx.h""?

我在 enginuity.cpp 中没有看到 #include "stdafx.h"。 ;) 如果您使用预编译头文件,则需要在 every 源 (.cpp) 文件中包含预编译头文件。

【讨论】:

让我怀念做助教的念头。 “我收到错误‘意外的行尾;可能缺少分号’,我该怎么办?” “嗯……你是不是少了一个分号?” “哦,是的!” 我试图将它添加到我的标题中,但我仍然收到错误消息。我不知道它必须在 .cpp 文件甚至所有 .cpp 文件中。我对预编译的头文件感到困惑。我认为一旦标题包含在文件中一次。不能再收录了??? @num 可以,尽管您通常不希望这样。它不包含在 enginuity.cpp 中,只是 main.cpp #include "stdafx.h" 必须是每个 .cpp 文件中的第一件事。 @num 不,您可以(并且必须)将它包含在每个 cpp 文件中。 #pragma once 或标头保护所做的唯一一件事就是阻止您在同一个 cpp 文件中包含两次标头【参考方案2】:

我刚刚在 stdafx.h 所在的父文件夹中的 cpp 文件中包含 stdafx.h 时遇到此错误。

#include "subfolder\stdafx.h"

导致编译错误。 将其更改为:

#include "stdafx.h"

修复了编译错误,但随后智能感知崩溃了。

根据 Microsoft here 的某人的说法,智能感知的“修复”是将“$(ProjectDir)”(或 stdafx.h 所在的任何位置)添加到 Project->Properties->Configuration 下的目录列表中属性->C/C++->常规->附加包含目录。

我已经在 Visual Studio 2012 中验证了此功能。在 2010 年也应该可以。

【讨论】:

也适用于 Visual Studio 2013 Community Edition :) 当 .cpp 文件位于子目录中时,在 Visual Studio 2017 中仍然需要。感谢您发布此答案!【参考方案3】:

你要么想把这条线放在一边

#include "stdafx.h"

在所有 .cpp 文件的顶部(在这种情况下,enenuity.cpp 是唯一缺少它的文件。

或禁用项目中的预编译头文件。

如果您在项目中启用了预编译头文件,Visual C++ 将在所有源文件的顶部查找 #include 指令。如果它不存在,您将收到您收到的负面评论。

【讨论】:

太好了,这解决了我遇到的类似问题,但我得到的错误是 【参考方案4】:

如果批准的解决方案不适合您:

在我的情况下,stdafx.h 包含在我的 .cpp 文件中的其他包含之后。

在 .cpp 文件的顶部设置 #include "stdafx.h" 语句修复了我的错误。

【讨论】:

【参考方案5】:

您的头文件enginuity.h 缺少#endif,还是发帖有误?

【讨论】:

【参考方案6】:

可以禁用单个文件的预编译头文件 (VS2010)。选择引起烦恼的 .cc 或 .cpp 文件,鼠标右键菜单,属性,预编译头文件, 预编译头(更改为)不使用预编译头。

【讨论】:

【参考方案7】:

您可以使用强制包含文件功能,而不是将 #include "stdafx.h" 添加到每个 .cpp 文件。该功能在此处记录:https://msdn.microsoft.com/en-us/library/8c5ztk84.aspx。

就我而言,我试图在新项目中编译来自另一个项目的现有 .cpp 文件。我知道我不应该更改每个文件,因为原始项目启用了预编译头文件,并且它以某种方式成功编译了相同的文件。发现原来项目中配置了这个选项,在新项目中进行同样的配置后,错误就消失了。

【讨论】:

【参考方案8】:

当我在所有包含的顶部提到 #include "stdafx.h" 时,我的问题得到了解决。

【讨论】:

【参考方案9】:

将#include "stdafx.h" 添加到enginuity.cpp 的顶部或禁用项目中的预编译头文件。

【讨论】:

【参考方案10】:

如果您在项目的子目录中有两个解决方案并且启用了预编译头文件,则会出现此错误。我也遇到过同样的问题,微软还没有解决。

https://connect.microsoft.com/VisualStudio/feedback/details/552449/

微软的解决方法有时会奏效。

【讨论】:

【参考方案11】:

正如 Viktor 上面提到的,包括 stdafx.h after 其他包含也会导致此错误,如果您使用添加函数向导,则很容易发生此错误。就我而言,向导将#include 添加到 cpp 文件的 trop 中(尽管它已经包含在内)所以我最终得到了(使用此示例)

#include "Enginuity.h"
#include "stdafx.h"
// ... other includes ...
#include "Enginuity.h"

【讨论】:

以上是关于查找预编译头文件时跳过的主要内容,如果未能解决你的问题,请参考以下文章

#include”* .h“ 在查找预编译头使用时跳过

fatal error C1010: 在查找预编译头时遇到意外的文件结尾

error C1010:在查找预编译头文件时遇到意外的文件结尾——————vs错误

禁用在 clang 前端查找预编译的头文件

OpenGL ES - 查找预编译头文件时意外结束

查找预编译头文件时意外结束。您是不是忘记将#include stdafx.h 添加到您的源代码中?