C ++向量迭代器访问冲突

时间:2019-07-09 21:02:11

标签: c++ pointers vector iterator

我目前正面临向量迭代器的问题。我应该提到我不是最好的C ++开发人员。 但似乎我无法正常工作。我只是想遍历向量并抹去元素(请参见下面的代码)。

我已经尝试过在没有迭代器的情况下做同样的事情。工作良好。我觉得问题出在矢量本身存储指针而不是实际对象这一事实上。

// THIS DOES NOT WORK:
void CMenu3DManager::RemoveListener(IMenu3DListener* listener) {
    for (std::vector<IMenu3DListener*>::iterator it = menu3DListeners.begin(); it != menu3DListeners.end(); ++it) {
        //THIS WORKS: IMenu3DListener* current = reinterpret_cast<IMenu3DListener*>(*it);
        if (*it == listener) {
            menu3DListeners.erase(it); // THIS CAUSES ERROR
            // BY THE WAY: THE FOLLOWING DOES NOT WORK: *it->AnyFunction(); Also it->AnyFunction(); does not work. It seems to not recognize the correct class for this pointer.
        }
    }
}



// THIS WORKS:
void CMenu3DManager::RemoveListener(IMenu3DListener* listener) {
    for (int i = 0; i < menu3DListeners.size(); i++) {
        if (menu3DListeners[i] == listener) {
            std::vector<IMenu3DListener*>::iterator it = menu3DListeners.begin() + i;
        menu3DListeners.erase(it);
        }
    }
}

错误消息说,当我使用迭代器时,存在访问冲突。

感谢您的帮助,祝您愉快。

0 个答案:

没有答案