我的应用程序中的类工作方式如下:s中的Creature字段很少Action.当这些Actions必须是运行Creature呼叫someActionField->do(this).Action有方法viod do(Creature* cr)和有关如何处理此事的所有信息Creature.
所以,Creature必须有Action字段并且知道Action有do方法.行动必须知道Creature有这样的领域,如:威尔,惠普等......
我有
creature.h
#include "effect.h"
#include "heedupdate.h"
namespace Core
{
class Action;
class Creature : public NeedUpDate
{
public:
virtual ~Creature();
int HP;
Action onHit;
Action onDie;
// ...
};
}
#endif
Run Code Online (Sandbox Code Playgroud)
和action.h
#include "creature.h"
namespace Core
{
class Action
{
public:
Action();
virtual void _do(Creature* cr);
virtual ~Action();
};
Run Code Online (Sandbox Code Playgroud)
但在这种情况下会`onDie' has incomplete type出现字段错误.如果我将action.h包含在creature.h中 - 我会在彼此之前使用文件'.
您的Creature类具有类型的成员Action.编译器需要知道Action要编译的类的完整定义- 使用前向声明生成的不完整类型是不够的.
的Action类只需要一个指针到一个Creature在该标题对象.在这种情况下,编译器只需要知道Creature将在某个时刻定义.
在您的具体情况下,您可以通过反转声明类的顺序来逃避.
(即前向声明Creature中action.h,并且包括action.h在creature.h)