gpt4 book ai didi

c++ - 无法将类 push_back 到 for 循环内的对象 vector 中

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

我无法调用将 push_back 返回到 vector 中的函数

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

调用函数的代码:

if (createBullet == true)
{
InitialiseBullet(bulletX, bulletY, 0, 500);
createBullet = false;
}

该代码在 for 循环之外时有效。但是,我需要 for 循环来提供对每个玩家、敌人和子弹对象的访问。有没有办法将 push_back 返回到基于同一 vector 的 for 循环内的 vector ?当它在循环内时,出现“表达式: vector 迭代器不兼容”错误。有任何想法吗? C++ 编程新手。

最佳答案

看起来你正在插入你正在迭代的同一个 vector ,这意味着你正在强制项目重新分配和迭代器失效;换句话说 - 您的数据移动到不同的位置并且使用的迭代器变得无效。


我很少看到您真正需要迭代和附加相同 vector 的情况,因此请再次查看您的代码。

如果您确实需要这样做,请以这种方式迭代:

for (size_t i = 0; i < gameObjects.size(); ++i)
{/*Some code*/}

同样使用此方法,您应该使用 gameObjects[i]. 而不是 it->

关于c++ - 无法将类 push_back 到 for 循环内的对象 vector 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25117613/

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