当我找到这样的标题时,我正在阅读Doom 3 SDK中的一些代码(在VS解决方案中):
#ifndef __PLAYERICON_H__
#define __PLAYERICON_H__
class idPlayerIcon {
public:
idPlayerIcon();
~idPlayerIcon();
...... // omitted
public:
playerIconType_t iconType;
renderEntity_t renderEnt;
qhandle_t iconHandle;
};
#endif /* !_PLAYERICON_H_ */
标题没有前向类声明,也没有#includes所以,根据我的经验,它应该导致如下错误:未声明的标识符或语法错误,导致renderEntity_t和qhandle_t未被“看到”。 那怎么能正确编译呢? 提前感谢您的答案。
答案 0 :(得分:4)
因为每次包含它,所需的实体都在它之前被声明/包含,所以一切都在包含点定义。正如你所说,它不会以任何其他方式运作。
答案 1 :(得分:3)
我猜他们在包含此标题之前会包含其他标题。
答案 2 :(得分:2)
由于这是一个头文件,因此很可能在其他地方(也就是使用这个文件的地方)有一个命令。只要renderEntity_t和qhandle_t在包含此文件之前将其放入符号表中就无所谓了。
答案 3 :(得分:1)
有没有叫做stdafx.h的东西?大多数VS项目都有这些。
它只是一个包含应用程序所需文件的标题,以减少包含标题的编译时间。
所以它会包含这样的内容:
#ifndef _STDAFX_H_
#define _STDAFX_H_
#include "playerIconAndOtherVariables.h"
#include "thatFileYouListed.h"
#endif