Creature
のアプリケーションのクラスはAction
でほとんどありません。これらのAction
を実行する必要がある場合は、Creature
をsomeActionField->do(this)
としてください。アクションにはviod do(Creature* cr)
というメソッドと、これに関連するすべての情報があります。Creature
C++クラスは互いに参照します(=>エラー+フィールド '...'は不完全な型です)
この場合、クリーチャーはAction
フィールドを持つ必要があり、Action
はdo
の方法を持っている必要があります。アクションはCreature
は以下のようなフィールドを持っていることを知っている必要があります、HPは、等...
私が持っているのでしょう
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
そしてaction.h
#include "creature.h"
namespace Core
{
class Action
{
public:
Action();
virtual void _do(Creature* cr);
virtual ~Action();
};
しかし、この場合はフィールド`onDie' has incomplete type
が表示されます。 action.hをcreature.hに含めると、私は '互いの前に'ファイルを使用します。 action.hで
完全に宣言
Action
クラスを必要とする依存関係を壊すことができず、この方法であなたはそれを投稿する前に、私はちょうど秒をつかまえました。 :) とにかくありがとう。 –
参考文献の一部は*間違っています。参照とポインタには同じ知識が必要です。また、OPのコードには参照がなく、完全なオブジェクトのみが含まれています。 – Xeo
@ Xeo:それは本当に言葉にはほとんど言わなかった。 – Mat