在查找预编译头时跳过

时间:2010-05-31 21:11:23

标签: c++ visual-studio visual-studio-2008 visual-c++

所以有些原因,我的.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?

11 个答案:

答案 0 :(得分:33)

您是否阅读了错误消息?

  

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

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

答案 1 :(得分:21)

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

#include "subfolder\stdafx.h"

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

#include "stdafx.h"

修复了编译错误,然后智能感知就吓坏了。

根据Microsoft here的某个人的说法,intellisense的“修复”是将“$(ProjectDir)”(或stdafx.h所在的位置)添加到Project-> Properties下的目录列表中 - >配置属性 - > C / C ++ - > General->其他包含目录。

我已经在Visual Studio 2012中验证了这一点。也应该在2010年工作。

答案 2 :(得分:6)

你要么想要放行

#include "stdafx.h"

位于所有.cpp文件的顶部(在这种情况下,enenuity.cpp是唯一一个错过它。

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

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

答案 3 :(得分:5)

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

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

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

答案 4 :(得分:3)

您的标头文件enginuity.h缺少#endif,或者发布时是否有错误?

答案 5 :(得分:3)

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

答案 6 :(得分:2)

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

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

答案 7 :(得分:1)

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

答案 8 :(得分:0)

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

答案 9 :(得分:0)

如果项目的子目录中有两个解决方案并且启用了预编译头,则会发生此错误。我遇到了同样的问题,微软还没有解决它。

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

微软的工作有时会起作用。

答案 10 :(得分:0)

正如Viktor上面提到的,包括stdafx.h 之后其他包含也会导致此错误,并且如果您使用添加功能向导,则可能非常容易发生。在我的情况下,向导将#include添加到cpp文件的trop(尽管已经包含它)所以我最终得到了(使用这个例子)

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