查找预编译头文件时跳过
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
指令。如果它不存在,您将收到您收到的负面评论。
【讨论】:
太好了,这解决了我遇到的类似问题,但我得到的错误是如果批准的解决方案不适合您:
在我的情况下,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"
【讨论】:
以上是关于查找预编译头文件时跳过的主要内容,如果未能解决你的问题,请参考以下文章
fatal error C1010: 在查找预编译头时遇到意外的文件结尾