无法将类push_back到 for 循环中的对象向量中
Can't push_back a class into an object vector inside a for loop
不能调用push_back函数
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循环是基于相同的向量?当它在循环内时,我得到一个"表达式:向量迭代器不兼容"的错误。什么好主意吗?c++编程新手
看起来你正在推入你正在迭代的同一个向量,这意味着,你正在强制项重新分配和迭代器无效;换句话说,你的数据移动到不同的位置,使用的迭代器无效。
我很少看到你真的需要迭代和追加相同的向量的情况,所以再检查一下你的代码。
如果你真的需要这样做,这样迭代:
for (size_t i = 0; i < gameObjects.size(); ++i)
{/*Some code*/}
同样使用此方法,您应该使用gameObjects[i].
而不是it->
它只是一个指针向量,所以不是很大。
添加的对象可能更小。
可以复制vector对象,在插入vector对象的同时遍历复制对象。
可以在迭代时将新项放入新的空向量中,然后在最后将它们拼接到实际向量上。
要删除对象,你可以做这两件事,或者你可以简单地设置一个标志"isZombie",然后在最后删除所有的僵尸。
这些不是唯一的答案,但它们都有效。
当使用迭代器遍历vector对象时,不能在for循环中修改vector对象
快速谷歌给了我这个;这似乎很适合你的情况。
可能是因为push_back…导致内部vector中的重新分配使其所有迭代器失效。
来源:http://www.cplusplus.com/forum/beginner/64854/
当我假设你使用迭代器是因为你的错误信息时,我理解对了吗?
你应该问自己的一个问题是,为什么你要向这个向量添加实例,也许你应该稍微重新考虑一下你的设计,以避免这种情况。
- 如何在C++中从两个单独的for循环中添加两个数组
- 为什么我的for循环不能正确获取argv
- 在基于范围的for循环中使用结构化绑定声明
- 通过for循环使用用户输入填充列表
- 使用for循环检查数组中的重复项
- 在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 正在使用for循环创建QScatterSerie
- Python中的for循环与C++有何不同
- 在更改for循环的第三部分后,未使用for循环结果
- 在 for 循环中查找问题时遇到困难
- 嵌套for循环C++的问题(初学者)
- 如何用for循环在c++中生成单词三角形
- 如何在for循环中包含两个索引值的测试条件
- 带有多个独立参数的C++For循环
- C++ Python 循环"for i, num in enumerate(list):"版本
- C 多循环 for () 基础知识
- 没有条件值的 FOR 循环"for (int i = 1; ; i++)"无法正常工作
- 为用户提供循环for循环的选项
- 打破循环for循环