나는 동물 클래스를 가지고 있으며,이 특정 동물로부터 파생됩니다. 나는 mItems라고 불리는 동물 목록을 가지고있다. 나는 사자가 배고픈 지보고 싶다.신비한 세그. 결함
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에서 항목을 제거하려고 할 때 segfaults 나타납니다. 어떤 아이디어?
-g로 컴파일하고 디버거를 통해 실행하십시오. – Sinkingpoint
void 함수를 반환합니까? – billz
반복되는 컬렉션에서 항목을 삭제하면 위험한 게임이됩니다. – bengoesboom