std :: List项目未被删除

时间:2013-12-15 11:38:06

标签: c++ stl std

我遇到的问题是列表项没有从std :: list中删除。由于某种原因,该项目保留在列表中,列表没有减少。换句话说,列表容器找不到该元素。

这是我的清单:

std::list<IPressable*> interactables;

这是删除项目的代码:

void RemoveInteractableobject(IPressable* object)
{
    interactables.remove(object);


    //This did not work either
    //interactables.erase(std::remove(interactables.begin(), interactables.end(), object), interactables.end());
}

IPressable是一个由难处理对象继承的抽象类。

我确保指针地址存在于列表中。

有没有人知道为什么会这样?我不是C ++中最有经验的人,但这是一个有趣的问题!

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

奥斯瓦德是正确的;问题出在我的代码中的其他地方。问题是IPressable是一个在多重继承中使用的抽象类。因此,我无法比较指针甚至值。执行此操作的代码是:

void DestroyRemovalStackedOBJS()
{
    while (!removalStack.empty())
    {
        TreeNode* currentNode = removalStack.top();

        RemoveChildFromOtherObject(currentNode, currentNode->parent);

        RemoveInteractableobject(dynamic_cast<IPressable*>(currentNode));

        removalStack.pop();

        delete currentNode;
    }
}

上面的代码从树结构(父母层次结构)和列表(用于显式管理所有对象)中删除节点。

问题在于我没有dynamic_cast<IPressable*>。这个类型转换将它转换为正确的类型,因此地址+数据与类型正确对齐(这有点猜测)

如果有人知道正在发生的事情的正确解释,请告诉我!

答案 1 :(得分:-1)

要从列表中删除您需要使用迭代器引用,您可能想尝试一下。首先循环遍历列表以获取正在查找的对象的迭代器引用并将其传递给擦除列表,它应该可以工作。更多信息http://www.sgi.com/tech/stl/List.html