使用头文件和StdAfx.h

4

我有一个简单的测试控制台应用程序。我正在尝试使用在simple.h文件中定义的nike2函数,实现在simple.cpp文件中。simple.h和simple.cpp文件都与主项目在不同的目录中。

我已将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"?

更新:

现在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到源文件(我不确定是否需要)。 不,这并不是必要的。头文件和源文件过滤器只是可视化过滤器,并不匹配任何真实目录模式或功能模式,它只是Visual Studio IDE中的可视化和分类。顺便说一下:我认为你不真正需要“StdAfx”。 - PaperBirdMaster
如果我需要使用StdAfx,我需要将其包含在simple.cpp中吗?为了让编译器满意,我必须写类似于#include "C:\c\usingHeader\usingHeader\stdafx.h"的内容吗? - vico
@user 不需要,只需像消息显示的那样添加 #include "stdafx.h" 即可。该文件将位于您的项目目录中,不需要完整路径。 - Bo Persson
3个回答

7

Stdafx.h用于创建预编译头文件,其中包含一些最常用的标准include

这主要是为了加快编译过程,因为WinAPI是一个非常庞大的东西。

你也可以查看这个问题,它有一个更详细的答案。


我已经在simple.cpp中添加了#include C:\c\usingHeader\usingHeader\stdafx.h,但是仍然存在错误,没有任何改变。 - vico

2

stdafx.h包含了一些你不希望改变的头文件。例如标准库就是从stdafx.h中被包含进来的,这样它们只需要编译一次。你应该在需要的地方都包含stdafx.h。如果你不想使用它,可以在项目首选项中关闭它。


我不建议在Visual Studio中禁用预编译头文件的使用,因为它可以加快编译速度。即使您在stdafx.h中包含了所使用的标准头文件,也只能获得很少的加速效果。 - Ghita

2

"StdAfx.h" 是用于 Visual Studio 中的预编译头文件。

您可以将其包含在您的 .cpp 文件中,或者对于不需要包含所有 Windows 头文件的文件,选择 "Not using precompiled headers"。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接