2013-04-04 102 views
1

我得到了下面的示例代码编译时错误,而使用unordered_map

// unordered_map::find 
#include <iostream> 
#include <string> 
#include <unordered_map> 

int main() 
{ 
    std::unordered_map<std::string,double> mymap = { 
    {"mom",5.4}, 
    {"dad",6.1}, 
    {"bro",5.9} }; 

    std::string input; 
    std::cout << "who? "; 
    getline (std::cin,input); 

    std::unordered_map<std::string,double>::const_iterator got = mymap.find (input); 

    if (got == mymap.end()) 
    std::cout << "not found"; 
    else 
    std::cout << got->first << " is " << got->second; 

    std::cout << std::endl; 

    return 0; 

当我试着使用VS 2010编译它在Windows 7上,我得到编译时错误(尽管它看起来OK我)

1>\testing.cpp(13): error C2552: 'mymap' : non-aggregates cannot be initialized with initializer list 
1>   'std::tr1::unordered_map<_Kty,_Ty>' : Types with a base are not aggregate 
1>   with 
1>   [ 
1>    _Kty=std::string, 
1>    _Ty=double 
1>   ] 
1>\testing.cpp(14): error C2078: too many initializers 
1>\testing.cpp(15): fatal error C1903: unable to recover from previous error(s); stopping compilation 

回答

7

您的编译器(VC10)不支持统一初始化。您的程序compiles fine on a conforming compiler

+3

请注意,截至目前,VC的版本还没有库初始化器列表构造函数。 – chris 2013-04-04 17:29:27

+0

@chris:谢谢你指出 – 2013-04-04 17:30:48