显示问题的简单,非常简单的代码示例:
#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> >'
答案 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
。