C:编译一些代码所需的转发类定义
作者:互联网
我正在用C编写一个小游戏作为练习,我遇到了一个难题.
基本思想是Level有一个Entity向量,每个Entity实例知道它属于哪个级别.到目前为止非常简单.
我在我的Entity类中得到了一些讨厌的编译错误,因为它无法弄清楚Level是什么.在实体声明之前的一个简单的前瞻性声明容易修复.但是,我已经在“Entity.h”中包含了“Level.h”.并且Level和Entity都在同一名称空间中声明和定义.
注意:Entity.h还包括Level.h.
#include "Level.h"
namespace GameNS {
// Required, otherwise the compiler complains
class Level;
class Entity
{
public:
...
当它到达实体时,编译器是否应该已经知道Level是什么?
解决方法:
不,那不是C编译器的工作原理.它的作用是它基本上一次传递一个翻译单元的文件.宽松地说,TU是一个包含所有包含的实现文件.
如果你在Level.h和Entity.h中包含了守卫(你可能会这样做)并且它们彼此包含,其中一个,根据顺序,将被编译器遗漏,其中一个名称将不会声明.
根据经验,尽可能使用前向声明,并包括您必须的位置.
标签:c,visual-c,forward-declaration 来源: https://codeday.me/bug/20190901/1780710.html