gpt4 book ai didi

c++ - vector::erase 导致奇怪的行为

转载 作者:行者123 更新时间:2023-11-30 04:16:36 26 4
gpt4 key购买 nike

我正在尝试创建一个垂直滚动的射击游戏,当您按下空格键时,会创建一颗子弹,然后当子弹离开屏幕时,子弹就会被销毁。我通过声明为 vector<BULLET> bullets; 的 vector 跟踪子弹当我试图销毁屏幕外的任何子弹时,我会遇到大量错误,例如: 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++;
}
}

让我感到沮丧的部分是我有一个类似的循环,它删除了一个包含指针的 vector 中需要删除的任何游戏对象:

for( auto it = activeInstances.begin(); 
it != activeInstances.end(); ){
if( (*it)->is_dead()){
it = activeInstances.erase(it);
}else{
it++;
}
}

这个工作得很好。

编辑:我不确定它是否有所不同,但仅供引用我添加了稍后出现的部分,该部分将在向 vector 添加项目符号的同一函数中出现:

if( key[SPACE] && reload == 0){
reload = reloadTime;
BULLET newBullet;
newBullet.init( x, y);
bullets.push_back( newBullet);
}

最佳答案

您的代码片段不同:

if( it->is_dead()){

对比

if( (*it)->is_dead()){

关于c++ - vector::erase 导致奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17650595/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com