我有一些看起来像这样的课程:
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编译器。
答案 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。