我目前正面临向量迭代器的问题。我应该提到我不是最好的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);
}
}
}
错误消息说,当我使用迭代器时,存在访问冲突。
感谢您的帮助,祝您愉快。