编译一些代码需要前向类定义

visual C++: Forward class definition required to compile some code

本文关键字:定义 代码 编译      更新时间:2023-10-16

我正在用c++编写一个小游戏作为练习,我遇到了一个难题。基本思想是,一个Level有一个vectorEntity,每个Entity实例都知道它属于哪一级。

我在我的实体类中得到一些讨厌的编译错误,因为它无法弄清楚Level是什么。在Entity声明之前一个简单的前向类声明很容易解决这个问题。但是,我已经在"Entity.h"中包括了"Level.h"LevelEntity都在同一个名称空间中声明和定义。

注:Entity.h也包括Level.h

#include "Level.h"
namespace GameNS {
  // Required, otherwise the compiler complains
  class Level;
  class Entity
  {
  public:
  ...

在到达Entity的时候,编译器不应该已经知道Level是什么了吗?

不,这不是c++编译器的工作方式。它所做的就是一次传递一个翻译单元。粗略地说,TU是一个包含其所有内容的实现文件。

如果你在Level.hEntity.h中有include守卫(你可能有),并且它们相互包含,根据顺序,它们中的一个将被编译器忽略,并且其中一个名称将不会被声明。

根据经验,可以的时候使用前向声明,必须的时候使用include