静态C++映射初始化错误C2552:无法使用初始值设定项列表初始化非聚合

Static C++ map initialization error C2552: non-aggregates cannot be initialized with initializer list

本文关键字:初始化 列表 错误 映射 C++ C2552 静态      更新时间:2023-10-16

我试图用下面的代码初始化标题中的映射,但它在标题中一直给我错误。我使用的是C++11,所以这应该是可能的,对吧?

typedef std::map<NPCAnimation::ID, std::map<Direction::ID, sf::Time>> AnimationSpeedMap;
AnimationSpeedMap AnimationSpeeds = {
    {NPCAnimation::WALK, {
            {Direction::LEFT, sf::milliseconds(100)},
            {Direction::RIGHT, sf::milliseconds(100)},
            {Direction::UP, sf::milliseconds(200)},
            {Direction::DOWN, sf::milliseconds(200)}
        }
    },
    {NPCAnimation::IDLE, {
            {Direction::LEFT, sf::milliseconds(600)},
            {Direction::RIGHT, sf::milliseconds(600)},
            {Direction::UP, sf::milliseconds(600)},
            {Direction::DOWN, sf::milliseconds(600)}
        }
    },
    {NPCAnimation::SPECIAL, {
            {Direction::LEFT, sf::milliseconds(500)},
            {Direction::RIGHT, sf::milliseconds(500)},
            {Direction::UP, sf::milliseconds(500)},
            {Direction::DOWN, sf::milliseconds(500)}
        }
    },
};

提前感谢!~grambler1

VS2012支持初始值设定项列表语法,但std::map的VS2012实现不支持。您必须等待支持才能添加此功能。

我遇到了同样的问题。遗憾的是,直到VS2013才支持括号初始化和许多其他C++11功能。

证明:http://msdn.microsoft.com/en-us/library/vstudio/bb386063(v=vs.120).aspx