私は動物クラスを持っており、この特定の動物から派生しています。mItems という動物のリストがあります。ライオンがお腹を空かせているかどうかを確認したい。Animals クラスに仮想関数を作成しました。
virtual void IsLion() {return false;}
virtual void IsHungry() {return false;}
virtual void SetHungry(bool state) {}
私のライオンクラスでは、これらを拡張しました:
virtual void IsLion () {return true;}
virtual void IsHungry () {return mHungry;}
virtual void SetHungry () {mHungry = state;}
mHungry は、ライオンがお腹を空かせているかどうかを表すブール値のメンバー変数です。
void CSafari::KillHungryLion()
{
for(list<CAnimals *>::iterator i=mItems.begin();
i != mAnimals.end(); i++)
{
if((*i)->IsLion())
{
if((*i)->IsHungry())
{
mItems.remove(*i);
delete *i;
}
}
}
}
mItems は、CAnimal オブジェクトへのポインターのリストです。
空腹のライオンは死んでいます!私が抱えている問題は、無限のセグメンテーション違反です。どこが間違っているのか特定できません。ライオンを空腹に定期的に更新するこれと本質的に同等の関数があり、これを呼び出します。mItems からアイテムを削除しようとすると、セグメンテーション違反が発生するようです。何か案は?