std::unique_ptr<Enemy>
のベクトルを反復処理して、player
の攻撃と衝突しているかどうかを確認しようとしています。もしそうなら、私はベクトルからEnemy
を削除したいと思う。Vectorから要素を反復して削除する。エラー:ベクトルイテレータがインクリメント可能ではありません
ファイル:C:私はこれを行うとき はしかし、私はエラーを取得102 式:
ベクトルイテレータincrementableないマイクロソフトのVisual Studio 14.0 \ VCの\ \ \プログラムファイル(x86のを)\ベクトル ラインを含めますプレイヤーが攻撃をトリガーする場合if(actionCnt > 0)
{
sf::FloatRect* playerAction = player->action(actionCnt);
if (!enemies.empty()) {
for (auto&i : enemies) {
if (playerAction->intersects(i->getBox())) {
i->kill();
enemies.erase(std::remove(enemies.begin(), enemies.end(), i));
}
}
}
delete playerAction;
playerAction = NULL;
}
ので、基本的に、actionCnt
が1になり、このセグメントが実行されます:
は、ここでは、コードです。
playerAction
は、スイングをシミュレートするために移動される矩形ですので、ここでは、矩形が敵と衝突している場合はそれを殺すことになります。
私はSFMLライブラリを使用していますが、クラスが何をしているのかは明らかです。
今私は、この物をテストするためにフィールドに1人の敵しかいません。だから、私がヒットしたら、enemies
ベクトルは空でなければならない。
これが問題であるかどうかに関わらず、 'for'の範囲で反復処理をしながら'消去 'したくないと信じてください。 – user4581301
[ベクトルからの要素の消去]の可能な複製(http:// stackoverflow。com/questions/347441/erasing-elements-from-a-vector) – LogicStuff
投稿されたスレッド@LogicStuffを見て、whileループに入れようとしていますが、 'たとえば、イテレータ を使用してenemies'ベクトル: ' playerAction->交差(* iter-> getBox()) ' は私にエラーを与えると言って ' "のstd :: unique_ptrを<敵、のstd :: default_delete>" "getBox"のメンバーはありません。 –
Ausche