C++初始化std::map<string,bool>报错无匹配构造函数如何解决?
问题原因
- 报错核心为初始化列表的键类型不匹配:C++语法中单引号(')仅可用于包裹单个字符的char类型字面量,你代码中用单引号包裹的
'0_0'属于多字符字面量,实际类型为int,无法隐式转换为std::map要求的std::string类型键。 - 类型不匹配导致整个初始化列表无法匹配
std::map接收std::initializer_list的构造函数,编译器因此抛出「无匹配构造函数」的错误。
解决方法
把初始化列表中所有键的单引号替换为双引号(双引号是C风格字符串的标识,可隐式转换为std::string),修改后代码如下:
std::map<std::string, bool> action_map = { {"0_0", true}, {"0_1", false}, {"0_2", false}, {"0_3", false}, {"0_4", true}, {"1_0", true}, {"1_1", false}, {"1_2", false}, {"1_3", true}, {"2_0", true}, {"2_1", false}, {"2_2", false}, {"2_3", true}, {"3_0", true}, {"3_1", false}, {"3_2", false}, {"3_3", true} };
内容的提问来源于stack exchange,提问作者user13770964
相关产品推荐
相关产品推荐

