2013-04-04 2 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 я получаю ошибку компиляции времени (хотя это выглядит хорошо для меня)

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

+0

@chris: Спасибо, что указали это –