[英]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返回到基於相同向量的for循環內的向量? 當它在循環內時,出現“表達式:矢量迭代器不兼容”錯誤。 有任何想法嗎? C ++編程的新手。
似乎您要插入要迭代的向量,這意味着您在強制項重新分配和迭代器無效。 換句話說-您的數據移至其他位置,並且使用的迭代器無效。
我很少看到真正需要迭代並附加相同向量的情況,因此請再次查看您的代碼。
如果您確實需要這樣做,請按照以下方式進行迭代:
for (size_t i = 0; i < gameObjects.size(); ++i)
{/*Some code*/}
同樣使用這種方法,您應該使用gameObjects[i].
代替it->
它只是指針的向量,所以不是很大。
添加的對象可能更小。
您可以復制向量,並在插入到真實向量中時遍歷該向量。
您可以在迭代時將新項目放入一個新的空向量中,然后最后將它們拼接到真實的項目上。
要刪除對象,您可以執行上述任一操作,也可以僅設置一個標志“ isZombie”,然后最后刪除所有僵屍。
這些不是唯一的答案,但它們都能起作用。
使用迭代器遍歷向量時,您無法在此“ for-loop”中修改向量。
一個快速的谷歌給了我這個。 這似乎很適合您的情況。
可能是因為push_back ...在向量中引起了內部重新分配,因此其所有迭代器均無效。
資料來源: http : //www.cplusplus.com/forum/beginner/64854/
當我由於錯誤消息而假定您使用迭代器時,是否可以正確理解您的意思?
您應該問自己的一個問題是,為什么要向此向量添加實例,也許您應該稍微重新考慮一下設計以避免這種情況。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.