このゾンビ/人間エージェント ベースのシミュレーションを実行しようとしていますが、親クラス「Creature」を持つこれらの派生クラス (人間とゾンビ) に問題があります。「Creature」で宣言された 3 つの仮想関数があり、これら 3 つすべてが「Human」と「Zombie」の両方で再宣言および定義されています。しかし、何らかの理由で、Human または Zombie 型のオブジェクトにメモリを割り当てるためにプログラムを "new" と呼ぶと、仮想関数が抽象的であるというエラーが表示されます。コードは次のとおりです。
ヘッダ:
class Creature
{
public:
virtual void Attack(Grid G) =0;
virtual void AttackCreature(Grid G, int attackdirection) =0;
virtual void Breed(Grid G) =0;
virtual ~Creature() {}
void Die();
void Move(Grid G);
int DecideSquare(Grid G);
void MoveTo(Grid G, int dir);
};
class Human : public Creature
{
public:
void Attack(Grid G);
void AttackCreature(Grid G, int attackdirection);
void Breed(Grid G); //will breed after x steps and next to human
int DecideAttack(Grid G);
};
class Zombie : public Creature
{
public:
void Attack(Grid G);
void AttackCreature(Grid G, int attackdirection);
void Breed(Grid G) {} //does nothing
int DecideAttack(Grid G);
};
cpp:
void Creature::Move(Grid G) {...}
int Creature::DecideSquare(Grid G) {...}
void Creature::MoveTo(Grid G, int dir) {...}
void Creature::Die() {...}
void Human::Breed(Grid G) {...}
int Human::DecideAttack(Grid G) {...}
void Human::AttackCreature(Grid G, int attackdirection) {...}
int Zombie::DecideAttack(Grid G) {...}
void Zombie::AttackCreature(Grid G, int attackdirection) {...}
void Zombie::Attack(Grid G) {...}