我有一个名为stdafx.h的头文件,当然这个是预编译的。 我已经读过我应该将这些文件包含在我的.cpp文件中,但是随后会出现一些这样的语句。
我应该将stdafx添加到我的标题中还是添加到我的cpp中?我认为将它放入标题是一种好习惯,但我似乎不得不把它放入标题中。
示例:
stdafx包含freeglut 我的类头文件的属性为GLenum。
我应该将stdafx包含在班级的.h中吗?
答案 0 :(得分:25)
stdafx.h 应该是项目中每个cpp文件中的第一个包含。
<小时/> 考虑到 C ++不编译头文件,只编译Cpp文件。
因此,如果stdafx是cpp文件中的第一个include,那么当它到达Cpp文件中的头文件 时,编译器将拥有头文件所需的所有内容。
e.g。
你有A.cpp&amp;
回历
A.h需要std:string。
因为这是一种很好的做法,所以你将#include <string>
放在stdafx.h中。
您的构建失败,因为没有任何东西可以看到std :: string
现在将stafx.h作为A.cpp和B.cpp中的第一个包含
当编译器命中A.cpp时,它会选择<string>
的include,然后选择A.h,一切都很开心,因为我们知道std :: string是什么。
编译器现在命中B.cpp,它再次包含stdafx,它会带来<string>
,然后命中B.h,这会带来A.h,因为已经包含了std :: string,所以它很高兴。
希望这有帮助。
答案 1 :(得分:6)
在stdafx.h中包含一些内容之前,先问自己这两个问题
如果其中任何一个的答案为“否”,则不包括它。