从列表中移除对象

Removing an Object From a list

本文关键字:对象 列表      更新时间:2023-10-16

我已经在我的

中声明了一个std::list<MachineState*> zombs
class CZombieView : public CWindowImpl<CZombieView>
{
public:

   CZombieView();
   void DrawGrid();
   Gdiplus::Bitmap m_BitmapImage;
   Gdiplus::Graphics m_GraphicsImage;
   MachineState zombieTestState;
   Machine<ZombieTraits> zombieMachine;
   MachineState zombieTestState2;
   MachineState zombieTestState3;

   Machine<HumanTraits>humanMachine;
   MachineState humanTestState;
   MachineState humanTestState2;
   MachineState humanTestState3;
   std::list<MachineState*> zombs;
   std::list<MachineState*> humans;
};

我声明了另一个类。Opp.cpp

class Op
{
 public:
   CZombieView * cz;
   MachineState * neighboor;
   MachineState * neighboor2;
   void setNeighboor(MachineState * decoy); //
   void setNeighboor2(MachineState * decoy2);
   virtual void Execute(MachineState& state) = 0;
 };

setneighbor函数设置zombieview的zombieTestState为变量邻居。当我尝试在邻居已经设置后调用cz->zombs.remove(neighboor)时,我得到异常,我在visual studio上的调用堆栈指向const _Nodeptr _Phead = this->_Myhead;…我不知道为什么会发生这种情况,或者如果这是从列表中删除对象的错误方式…如有任何意见,不胜感激

void Op::setNeighboor2(MachineState * decoy2)
{
     neighboor2 = decoy2;
    cz->zombs.remove(neighboor2);
    std::cout<<"SET";
}

我的程序停在cz->zombs.remove(neighboor2),打印语句甚至没有被打印。

可能您的cz没有正确初始化。这将解释在第一次解引用它以获得僵尸成员然后在其上调用方法时崩溃的原因。您应该在Op的构造函数中将其设置为nullptr,并在它崩溃时检查该值。