Я хотел бы объявить const unordered_map
, но я получаю ошибку компилятора, и я не могу понять правильный синтаксис. Все примеры, которые я нашел, но один из них не const, и я делаю это точно как единственный пример const, который я знаю, но я получаю ошибки компилятора. Вот мой код:Как использовать "const unordered_map"?
typedef const std::unordered_map<std::string,int> StringIntMap;
StringIntMap string_to_case {
{"get",1},
{"add",2}
};
против 110 дает мне:
Error 1 error C2601: 'string_to_case' : local function definitions are illegal
или если я ставлю знак равенства между string_to_case
и кронштейном я получаю:
Error 1 error C2552: 'string_to_case' : non-aggregates cannot be initialized with initializer list
против 120_CTP_Nov2012 вместо дает меня следующие с или без знака равенства:
error C2440: 'initializing' : cannot convert from 'initializer-list' to 'std::unordered_map<std::string,int,std::hash<_Kty>,std::equal_to<_Kty>,std::allocator<std::pair<const _Kty,_Ty>>>'
1> with
1> [
1> _Kty=std::string
1> , _Ty=int
1> ]
1> No constructor could take the source type, or constructor overload resolution was ambiguous
что я делаю неправильно?
спасибо, но визуальная студия (по крайней мере, у версий, к которым у меня есть доступ, vs2012 update 5 и vs2012 CTP nov 2012), и не принимает ее :( – AbsolutelyFreeWeb
Согласен. Вам нужно VS 15 или лучше (версия компилятора 19). –
Мне понадобится около часа, чтобы установить последнюю версию Fedora Linux в запасную коробку, с gcc 6.1.1 «из коробки». Если вы хотите использовать современный компилятор C++, поддерживающий самые последние стандарты C++, вы должны быть способный решить эту проблему довольно быстро. –