C++中另一个类的枚举(使用SFML)

Enums from another class in C++ (with SFML)

本文关键字:使用 SFML 枚举 另一个 C++      更新时间:2023-10-16

我使用的是以下代码:

void GameObjectManager::DrawHUD(sf::RenderWindow& renderWindow)
{
    std::map<std::string, VisibleGameObject*>::const_iterator itr = _gameObjects.begin();
    while (itr != _gameObjects.end())
    {
        //if (itr->second->GetObjectType() == VisibleGameObject::HUD)
        //{
            itr->second->Draw(renderWindow);
            itr++;
        //}
    }
}

绘制ObjectType HUD的所有元素。ObjectType是我的另一个类VisibleGameObject中的一个枚举。如果我在代码中使用斜杠(所以当我不检查枚举时),一切都很好。但当我只想绘制ObjectType HUD的对象时,我的程序就会陷入调试模式。我在调试中没有任何错误。它只是停留在画整个东西上。

有人看到我做错了什么吗?

提前感谢

Xentro

您遇到的问题是,如果条件不成立,则永远不会递增迭代器。如果您从不递增迭代器,它将永远不会等于end()。您需要始终递增迭代器,并在if语句中进行处理:

void GameObjectManager::DrawHUD(sf::RenderWindow& renderWindow)
{
    std::map<std::string, VisibleGameObject*>::const_iterator itr = _gameObjects.begin();
    while (itr != _gameObjects.end())
    {
        if (itr->second->GetObjectType() == VisibleGameObject::HUD)
        {
            itr->second->Draw(renderWindow);
        }
        itr++;  // unconditional increment.
    }
}

如果你想的话,你可以使用基于范围的C++11以上的循环,比如:

void GameObjectManager::DrawHUD(sf::RenderWindow& renderWindow)
{
    for (auto & e : _gameObjects)
    {
        if (e.second->GetObjectType() == VisibleGameObject::HUD)
            e.second->Draw(renderWindow);
    }
}