我在尝试迭代另一个对象指向的地图时遇到此错误。它在我不使用指针时有效。 (迭代成员地图“碎片”)因此我想知道该怎么做,或者是否不可能像这样迭代地图? :
Board * Board::ccBoard(){
Board * newBoard = new Board();
map<Vec2, Piece>::iterator it;
for (it = newBoard->pieces.begin(); it != newBoard->pieces.end(); ++it)
newBoard->removePiece(it->first);
return newBoard;
}
提前致谢!
答案 0 :(得分:1)
removePiece()
函数会删除it
引用的元素,使it
无效。然后尝试增加it
,导致断言失败。来自map::erase()
:
擦除元素的引用和迭代器无效。
我不确定for
循环的意图是什么,它似乎会有效地清空map
,在这种情况下只使用map::clear()
:
newBoard->pieces.clear();
答案 1 :(得分:0)
要修复,请删除for循环中的++it
并将it->first
替换为it++->first
。
(这将增加迭代器并使用副本调用erase()。)