繁体   English   中英

使用指针从std :: list中删除项目

[英]Remove item from std::list using pointers

是否可以使用.remove并将对象作为指针从std :: list中删除对象?

我变得很困惑与指针。 我有以下课程,例如:

class AsteroidGen{
    public:
        std::list<Asteroid*> listAsteroids;
        void AsteroidGen::generateAsteroid(int amount, int delet);
        void AsteroidGen::DrawAsteroids();
};

那有一个指向我的小行星对象的指针的列表。 由于它是一个指针,因此我假设我将能够使用指针浏览并删除它。

在我的主类中,我创建一个AsteroidGen实例,然后填充列表并绘制它。 这一切都很好。 然后,我尝试从项目符号与之冲突的列表中删除其中一项:

bool CheckBulletCollision(Lazer lazer, AsteroidGen asteroids){
    bool collision = false;
    for each(Asteroid *c in asteroids.listAsteroids){
        Position pos = c->pos;
        float lazx = lazer.mPos.x;
        float lazy = lazer.mPos.y;
        float lazz = lazer.mPos.z;
        float distance = sqrt(pow(pos.x - lazx, 2) + pow(pos.y - lazy, 2) + pow(pos.z - lazz, 2));
        if( distance < 2.05){
            asteroids.listAsteroids.remove(c);
            lazergone = true;
            break;
        }
    }
    return collision;
}

我尝试逐行浏览我的代码以查看出了什么问题,但是列表项实际上并未在下一帧中删除。 我可能没有正确使用指针,但仍然发现它们很困难。

有人可以给我建议吗! 告诉我是否需要添加更多代码,我认为这已经足够了。谢谢。

您正在按值将AsteroidGen传递给函数。 这意味着将创建一个副本 ,并且该函数将在本地副本上运行,该本地副本在函数结束时将被丢弃。 小行星确实从列表中删除,但是从副本中存储的列表中删除

如果要在函数中修改AsteroidGen对象,则必须通过引用传递它:

bool CheckBulletCollision(Lazer lazer, AsteroidGen &asteroids) {
  // ... rest of code as before
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM