我有这个非常简单的主要功能
#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)
答案 0 :(得分:3)
您看到的问题是,MS Visual C ++默认使用名为precompiled headers的功能(其他平台上的其他编译器具有类似的功能,我记得GCC例如具有此功能) 。这样可以确保预编译所有引用到预编译头部的代码都是预编译的,因此编译器在编译时的工作量较少。
当你改变它时发生的事情是,它假定了" abc.h"的内容。当他们实际上没有预先编译时。一个简单的解决方案是将#include "abc.h"
放在stdafx.h
内。有关stdafx.h标头如何工作的更多详细说明,请参阅here。
可以在编译器选项中轻松关闭预编译头选项。应该有一个"预编译的头文件/预编译"选项中的类别,在我之前遇到的Visual C ++ IDE中。