2012-08-07 70 views
4

我有简单的测试控制台应用程序。我试图使用simple.h文件中定义的函数nike2,并且在simple.cpp中实现。 simple.h和simple.cpp文件都位于与主项目不同的目录中。使用头文件和StdAfx.h

我在项目资源管理器中添加simple.h到“头文件”和simple.cpp到“源文件”(我不知道它是需要)

控制台应用程序:

#include "stdafx.h" 
#include "..\..\simple.h" 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
nike2(5); 
return 0; 
} 

Simple.h

#include <cstdlib> 
#include <iostream> 

#ifndef MEMORY 
#define MEMORY 

int var; 
int nike2(int f); 

#endif /*MEMORY*/ 

Simple.cpp

#include <cstdlib> 
#include <iostream> 
#include "simple.h" 


int nike2(int f) 
{ 
return 0; 
} 

虽然编译我得到错误:

Error 4 error C1010: unexpected end of file while looking for precompiled header. Did you forget to add '#include "StdAfx.h"' to your source? c:\c\simple.cpp 11 1 usingHeader 

为什么?什么是魔术“StdAfx.h”用于?

UPD

simple.cpp现在看起来这种方式,但仍然有同样的错误

#include "C:\c\usingHeader\usingHeader\stdafx.h" 
#include <cstdlib> 
#include <iostream> 
#include "simple.h" 


int nike2(int f) 
{ 
return 0; 
} 
+1

'我在项目资源管理器中添加了simple.h头文件和simple.cpp源文件(我不确定是否需要)'不,不需要,Header和Source过滤器只是可视化的过滤器并不匹配任何实际目录模式的功能模式,它只是可视化和分类到Visual Studio IDE中。顺便说一句:我认为你不需要“StdAfx”。 – 2012-08-07 14:09:33

+0

如果我需要StdAfx,我需要添加它将其包含到simple.cpp中?为了让comiler开心,我必须写一些类似'#include“的C:\ c \ usingHeader \ usingHeader \ stdafx.h”'? – vico 2012-08-07 14:28:45

+0

@user不,只需添加'#include“stdafx.h”'就像消息所示。该文件将在您的项目目录中,并且不需要完整的路径。 – 2012-08-07 15:36:44

回答

7

Stdafx.h用于制造预编译头。它包含一些最常用和最常用的include

这主要是为了加快编译过程,因为WinAPI是一个很重要的东西

您还可以检查this question,它有一个更详细的答案。

+0

我添加了#include'C:\ c \ usingHeader \ usingHeader \ stdafx.h'到simple.cpp,但没有任何改变 - 仍然有这个错误。 – vico 2012-08-07 14:36:35

2

stdafx.h包含标题包含您不希望更改的内容。像标准库这样的东西包含在stdafx.h中,所以它们只需要编译一次。你应该在任何你需要的地方包含stdafx.h。如果您不想使用它,可以在项目首选项中关闭它。

+0

我不会推荐禁用在Visual Studio上使用预编译头文件,因为它会加快编译速度。即使你包含在stdafx中。h std使用的头文件,并且您只能获得很多加速 – Ghita 2012-11-28 20:03:40

2

What is magic "StdAfx.h" used for?

它用于Visual Studio中的预编译头文件。

您可以将它包含在您的.cpp文件中,也可以选择“不使用预编译头文件”来获取那些不需要包含所有Windows头文件的文件。