其他分享
首页 > 其他分享> > C:编译一些代码所需的转发类定义

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