簡體   English   中英

C ++,將迭代器用於指向的地圖容器時出錯。 映射/設置迭代器不可遞增

[英]C++, error when using iterator for a map container that is pointed to. map/set iterator not incrementable

嘗試迭代另一個對象指向的地圖時出現此錯誤。 當我不使用指針時,它可以工作。 (遍歷成員映射“件”)因此我想知道該怎么做,或者是否不可能像這樣遍歷整個映射?

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;
}

提前致謝!

所述removePiece()函數刪除該元素it指的是,無效it 然后嘗試增加it導致斷言失敗。 map::erase()

對已刪除元素的引用和迭代器無效。

我不確定for循環的意圖是什么,看來它將有效地清空map在這種情況下,只需使用map::clear()

newBoard->pieces.clear();

要修復,擺脫++it的for循環和取代it->firstit++->first

(這將使迭代器增加,並使用副本調用Ease()。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM