为什么必须在开始时包含stdafx.h?

时间:2015-03-27 10:00:18

标签: c++

我有这个非常简单的主要功能

#include "stdafx.h"
#include "abc.h"

int _tmain(int argc, _TCHAR* argv[])
{
    abc obj;
    obj.show();
    return 0;
}

一切都在正常编译......但在我写作的时候

#include "abc.h" 
#include "stdafx.h"


    int _tmain(int argc, _TCHAR* argv[])
    {
        abc obj;
        obj.show();
        return 0;
    }

编译器正在变得干扰..

错误C2065:'abc':未声明的标识符

错误C2146:语法错误:缺少';'在标识符'obj'之前

错误C2065:'obj':未声明的标识符

错误C2228:'。show'的左边必须有class / struct / union

type是''unknown-type''

为什么强制包含

stdafx.h

一开始? 我是C ++的新手......也许我犯了一个愚蠢的错误。请帮忙:(

(使用:VS2005和C ++ 98)

1 个答案:

答案 0 :(得分:3)

您看到的问题是,MS Visual C ++默认使用名为precompiled headers的功能(其他平台上的其他编译器具有类似的功能,我记得GCC例如具有此功能) 。这样可以确保预编译所有引用到预编译头部的代码都是预编译的,因此编译器在编译时的工作量较少。

当你改变它时发生的事情是,它假定了" abc.h"的内容。当他们实际上没有预先编译时。一个简单的解决方案是将#include "abc.h"放在stdafx.h内。有关stdafx.h标头如何工作的更多详细说明,请参阅here

可以在编译器选项中轻松关闭预编译头选项。应该有一个"预编译的头文件/预编译"选项中的类别,在我之前遇到的Visual C ++ IDE中。