C++类互相引用(=>错误+字段'...'具有不完整类型)

Ben*_*man 4 c++ class

我的应用程序中的类工作方式如下:s中的Creature字段很少Action.当这些Actions必须是运行Creature呼叫someActionField->do(this).Action有方法viod do(Creature* cr)和有关如何处理此事的所有信息Creature.

所以,Creature必须有Action字段并且知道Actiondo方法.行动必须知道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中 - 我会在彼此之前使用文件'.

Mat*_*Mat 8

您的Creature类具有类型的成员Action.编译器需要知道Action要编译的类的完整定义- 使用前向声明生成的不完整类型是不够的.

Action类只需要一个指针到一个Creature在该标题对象.在这种情况下,编译器只需要知道Creature将在某个时刻定义.

在您的具体情况下,您可以通过反转声明类的顺序来逃避.

(即前向声明Creatureaction.h,并且包括action.hcreature.h)