C++ Can';t将类推回for循环中的对象向量
我不能调用将u推回向量的函数C++ Can';t将类推回for循环中的对象向量,c++,for-loop,vector,C++,For Loop,Vector,我不能调用将u推回向量的函数 void GameState::InitialiseBullet(float x, float y, float vx, float vy) { Bullet* bullets = new Bullet(); bullets->SetSize(5.f, 20.f); bullets->AddFrame("./images/bullet.png"); bullets->Play(); bullets->S
void GameState::InitialiseBullet(float x, float y, float vx, float vy)
{
Bullet* bullets = new Bullet();
bullets->SetSize(5.f, 20.f);
bullets->AddFrame("./images/bullet.png");
bullets->Play();
bullets->SetX(x);
bullets->SetY(y);
bullets->velocityX = vx;
bullets->velocityY = vy;
bullets->isActive = true;
gameObjects.push_back(bullets);
}
当它位于以下for循环内时
for (auto& object : gameObjects)
{
//Determine the type at runtime
if (dynamic_cast<Player*>(object) != 0)
{
//Process player-specific logic
PlayerLogic(dynamic_cast<Player*>(object), a_fTimeStep);
}
//Determine the type at runtime
if (dynamic_cast<Bullet*>(object) != 0)
{
//Process bullet-specific logic
BulletLogic(dynamic_cast<Bullet*>(object), a_fTimeStep);
}
if (dynamic_cast<Enemy*>(object) != 0)
{
//Process enemy-specific logic
Enemy* enemy = dynamic_cast<Enemy*>(object);
EnemyLogic(enemy, lowerAliens);
if (enemy->GetIsActive() == true)
{
allDead = false;
}
}
//Update and draw our objects
object->Update(a_fTimeStep);
object->Draw();
}
该代码在for循环之外时有效。但是,我需要for循环来提供对我的每个玩家、敌人和子弹对象的访问。有没有办法将_推回基于相同向量的for循环中的向量?当它在循环中时,我得到一个“表达式:向量迭代器不兼容”错误。有什么想法吗?新的C++编程。< P>当使用迭代器循环你的向量时,你不能在这个“for循环”中修改向量。 一个快速的谷歌给了我这个;看起来很适合你的情况 可能是因为推回。。。引起内部冲突 在向量中重新分配,因此其所有迭代器都无效 资料来源: 当我假设您由于错误消息而使用迭代器时,我是否正确地理解了您
您应该问自己的一个问题是,为什么要向该向量添加实例,也许您应该稍微重新考虑一下您的设计以避免这种情况。看起来您正在推进与正在迭代的向量相同的向量,这意味着,您正在强制项重新定位和迭代器失效;换句话说,您的数据移动到不同的位置,使用的迭代器变得无效
我很少看到您真正需要迭代并附加相同向量的情况,所以请再次查看您的代码 如果确实需要这样做,请按以下方式迭代:
for (size_t i = 0; i < gameObjects.size(); ++i)
{/*Some code*/}
for(size_t i=0;i
同样使用这种方法,你应该使用
游戏对象[i]。
而不是它->
它只是一个指针向量,所以它不是很大
添加的对象可能更小
您可以创建向量的副本,并在插入到真实副本时迭代该副本
您可以在迭代时将新项放入新的空向量中,然后在最后将它们拼接到真实向量上
要删除对象,您可以执行以下任一操作,或者只需设置一个标志“isZombie”,然后在最后删除所有僵尸
这些不是唯一的答案,但它们都有效。-1当使用迭代器在向量中循环时,您不能在此“for循环”中修改向量内容。我不这么认为,你可以…我的错,用错误的方式表达我自己,谢谢你的留言!谢谢大家。最后我把它们分成了不同的向量,把它们作为一个向量的一部分,速度太慢,而且有问题。我是在创建了一个单独的向量一段时间后这样做的,这个向量充当了将子弹推回到主向量的队列。
for (size_t i = 0; i < gameObjects.size(); ++i)
{/*Some code*/}