2013-07-29 150 views
10

我试图用下面的代码初始化标题中的映射,但它一直给我标题中的错误。我使用C++ 11,所以这应该是可能的,对吧?静态C++映射初始化错误C2552:非聚合无法用初始值设定项列表初始化

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

+0

取决于你的VS的版本,而且我不确定它是否支持在所有。 – hmjd

+0

我正在使用VS2012 Express。 新的C++ 11标准支持初始化程序列表 – BarrensZeppelin

+0

是的,但它们可能不会在VS2012中实现(并且从错误中可以看出它们不是)。 – hmjd

回答

14

VS2012支持初始化器列表语法,但VS3612的实现不是std::map。您必须等待支持才能添加。

+1

在Visual Studio 2013中添加了对初始化程序列表的支持。您不能在VS2012中进行括号初始化。 http://msdn.microsoft.com/en-us/library/vstudio/bb386063(v=vs.120).aspx –

+0

2012 CTP确实包括对统一初始化的支持。 –