スペースを押すと弾丸が作成され、弾丸が画面から消えると弾丸が破壊される垂直スクロールシューティングゲームを作成しようとしています。vector<BULLET> bullets;
画面の外にある弾丸を破壊しようとすると、次のような大量のエラーが発生します
。c:\mingw\bin\..\lib\gcc\mingw32\4.7.0\include\c++\bits\stl_algobase.h|384| required from '_OI std::__copy_move_a(_II, _II, _OI) [with bool _IsMove = true; _II = BULLET*; _OI = BULLET*]'|
私のコードは次のようになります。
for( auto it = bullets.begin(); it != bullets.end(); ){
if( it->is_dead()){
it = bullets.erase(it);
}else{
it++;
}
}
私を苛立たせている部分は、ポインタを保持するベクトルで削除する必要があるゲームオブジェクトを削除する同様のループがあることです:
for( auto it = activeInstances.begin();
it != activeInstances.end(); ){
if( (*it)->is_dead()){
it = activeInstances.erase(it);
}else{
it++;
}
}
これは問題なく動作します。
編集:違いがあるかどうかはわかりませんが、参考までに、ベクトルに箇条書きを追加する同じ関数で後で発生するセクションを追加しています:
if( key[SPACE] && reload == 0){
reload = reloadTime;
BULLET newBullet;
newBullet.init( x, y);
bullets.push_back( newBullet);
}