我是C ++新手,使用列表时遇到问题。我无法理解为什么我在下面的示例中收到错误。
GameObject类是一个抽象类 Player类和Bullet类继承GameObject类
list<GameObject*> gameObjects = list<GameObject*>();
gameObjects.push_front(&player);
while(gameLoop)
{
if (canShoot)
{
Bullet b = Bullet(player.Position.X , player.Position.Y);
gameObjects.push_front(&b);
}
for each (GameObject *obj in gameObjects)
{
(*obj).Update(); // get an error
}
}
错误是调试错误-Abort()已被调用。
答案 0 :(得分:2)
您的foreach
语法错误,实际上,更多的是,循环遍历列表中的每个元素:
for (GameObject *obj : gameObjects)
{
obj->Update();
}
或者,预先C ++ 11:
for(std::list<GameObject*>::iterator itr = gameObjects.begin(); itr != gameObjects.end(); ++itr)
{
(*itr)->Update();
}
此外,您正在Bullet
范围内创建if (canShoot)
对象,并将其推送到std::list<GameObject*>
。当您到达foreach
时,Bullet
对象已经被销毁,因此列表中的指针悬空。
在堆上动态分配对象:
list<GameObject*> gameObjects;
while(gameLoop)
{
if (canShoot)
{
Bullet* b = new Bullet(player.Position.X , player.Position.Y);
gameObjects.push_front(b);
}
for (GameObject* obj : gameObjects)
{
obj->Update();
}
}