类在单独文件中的奇怪行为

时间:2013-08-19 19:09:17

标签: c++ class object

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

World.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_ */

GameObject.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编译器。

1 个答案:

答案 0 :(得分: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

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

有关详细信息,请参阅When to use forward declarations