0

我有一些看起来像这样的类:

世界.h:

#ifndef WORLD_H_
#define WORLD_H_
#include "GameObject.h"
#include <vector>

class World
{
public:
std::vector<GameObject*> objects;

World();
virtual ~World();
void add(GameObject*);
void initialize();
void update();
void render();
};

#endif /* WORLD_H_ */

游戏对象.h:

#ifndef GAMEOBJECT_H_
#define GAMEOBJECT_H_
#include "util/Point.h"
#include "World.h"

class GameObject
{
public:
World *world;
Point *position;
GameObject();
virtual ~GameObject();

virtual void update();
virtual void render();
};

#endif /* GAMEOBJECT_H_ */

为什么会报错:
“World.h,第 9 行 - 'GameObject' 尚未声明”和
“World.h,第 13 行 - 'GameObject' 未在此范围内声明”?

我正在使用 Linux GCC 4.8.1 编译器。

4

1 回答 1

3

您有一个循环包含依赖项。但在这种情况下,您可以使用前向声明而不是包含:

#ifndef WORLD_H_
#define WORLD_H_
#include <vector>

class GameObject; // forward declaration

class World
{
  // as before
};
#endif

#ifndef GAMEOBJECT_H_
#define GAMEOBJECT_H_

class World;
class Point;

class GameObject
{
  // as before
};
#endif

然后,在需要它们的实现文件中包含头文件。

有关更多详细信息,请参阅何时使用前向声明

于 2013-08-19T19:11:15.607 回答