2013-07-29 196 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確實包括對統一初始化的支持。 –