我想声明一个const unordered_map
,但是我遇到编译器错误,我无法弄清楚正确的语法。我发现的所有例子都是非const的,我正在做的就是我所知道的唯一的const例子,但是我遇到了编译器错误。这是我的代码:
typedef const std::unordered_map<std::string,int> StringIntMap;
StringIntMap string_to_case {
{"get",1},
{"add",2}
};
vs 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
vs 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
我做错了什么?
答案 0 :(得分:1)
这适用于gcc 6.1.1:
$ cat t.C
#include <unordered_map>
#include <string>
typedef const std::unordered_map<std::string,int> StringIntMap;
StringIntMap string_to_case = {
{"get",1},
{"add",2}
};
$ g++ -g -c -std=c++1z -o t.o t.C
$ g++ --version
g++ (GCC) 6.1.1 20160621 (Red Hat 6.1.1-3)
你没有做错任何事。您遇到了编译器错误,您的编译器不支持最新的C ++标准。