簡體   English   中英

無法將一個類推入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返回到基於相同向量的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM