嵌套的地图括号初始化无法编译

时间:2014-09-19 01:39:46

标签: c++ c++11 map

显示问题的简单,非常简单的代码示例:

#include <string>
#include <map>

static std::map<std::string, std::map<std::string, int>> defaults = {
    { std::string("Definitely a string"), { std::string("This too"), 0 }},
};

错误? main.cpp:4:58: No matching constructor for initialization of 'std::map<std::string, std::map<std::string, int> >'

1 个答案:

答案 0 :(得分:8)

你需要额外的一对括号:

#include <string>
#include <map>

static std::map<std::string, std::map<std::string, int>> defaults = {
    { std::string("Definitely a string"), {{ std::string("This too"), 0 }}},
//                                        ^                              ^
};

它与初始化外部地图的方式基本相同 - 内部地图需要使用初始化列表(一对括号)进行初始化,其中包含地图键值对的初始化列表 - 另一个每个元素的一对括号。

Matt McNabb指出,你不必明确构建std::string