0

別のオブジェクトが指しているマップを反復処理しようとすると、このエラーが発生します。ポインタを使用していないときに機能します。(メンバーマップの「ピース」を反復処理する)したがって、どうすればよいのか、またはこのようにマップを反復処理できないのかどうか疑問に思っています。:

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

前もって感謝します!

4

2 に答える 2

1

このremovePiece()関数は、参照している要素を削除itし、を無効にしitます。次に、インクリメントが試行さitれ、アサーションが失敗します。差出人map::erase()

消去された要素への参照とイテレータは無効になります。

ループの意図が何であるかはわかりforません。効果的に空にmapなるようです。その場合は、次を使用してmap::clear()ください。

newBoard->pieces.clear();
于 2012-07-09T13:14:41.610 に答える
0

修正するには、forループ内のを削除し++it、に置き換えます。it->firstit++->first

(これにより、イテレータがインクリメントされ、コピーを使用してerase()が呼び出されます。)

于 2012-07-09T13:19:49.650 に答える