A proper forward declaration is simply:
class Level;
Note the lack of curly braces. This tells the compiler that there's a class named Level
, but nothing about the contents of it. You can then use pointers (Level *
) and references (Level &
) to this undefined class freely.
Note that you cannot directly instantiate Level
since the compiler needs to know the class's size to create variables.
class Level;
class Entity
{
Level &level; // legal
Level level; // illegal
};
To be able to use Level
in Entity
's methods, you should ideally define Level
's methods in a separate .cpp
file and only declare them in the header. Separating declarations from definitions is a C++ best practice.
// entity.h
class Level;
class Entity
{
void changeLevel(Level &);
};
// entity.cpp
#include "level.h"
#include "entity.h"
void Entity::changeLevel(Level &level)
{
level.loadEntity(*this);
}
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…