C++ 如何初始化'std::map<;std::string,CodeInfo>;`使用列表初始化?

C++ 如何初始化'std::map<;std::string,CodeInfo>;`使用列表初始化?,c++,class,c++11,stdmap,list-initialization,C++,Class,C++11,Stdmap,List Initialization,我有一个带有字符串键和结构值的映射,我不知道为什么不能使用以下命令实例化对象: #包括 #包括 使用名称空间std; 结构代码信息 { int _level=0; 布尔反应; }; typedef映射代码infos;//密钥是代码名 int main() { CodeInfosCodes={{“BARECODE”、{0,true}}、{“BARECODE2”、{0,false}}; 返回0; } 这似乎是直截了当的,但我不明白为什么会出现以下错误: In function 'int main(

我有一个带有字符串键和结构值的映射,我不知道为什么不能使用以下命令实例化对象:

#包括
#包括
使用名称空间std;
结构代码信息
{
int _level=0;
布尔反应;
};
typedef映射代码infos;//密钥是代码名
int main()
{
CodeInfosCodes={{“BARECODE”、{0,true}}、{“BARECODE2”、{0,false}};
返回0;
}
这似乎是直截了当的,但我不明白为什么会出现以下错误:

In function 'int main()':    
24:80: error: could not convert '{{"BARECODE", {0, true}}, {"BARECODE2", {0, false}}}' from '<brace-enclosed initializer list>' to 'CodeInfos {aka std::map<std::basic_string<char>, CodeInfo>}'
函数“int main()”中的
:
24:80:错误:无法将“{“BARECODE”、{0,true}}、{“BARECODE2”、{0,false}}}”从“”转换为“CodeInfos{aka std::map}”

我已经将编译器g++(GCC)4.9.1 20140922(Red Hat 4.9.1-10)与C++11一起使用。

原因是
CodeInfo
不是聚合的,因为您直接在类的定义中初始化一个数据成员(
\u level=0

删除该成员的将与C++11一起使用


阅读这篇文章了解有关聚合的更多信息:

“这相当于为类提供默认构造函数,因此不适用于列表初始化。”不,不是真的。我们通常不调用
int\u level=0“直接初始化”。该标准使用术语“默认成员初始值设定项”。@cpplearner感谢您指出了正确的单词。关于默认构造函数,我在另一个答案中找到了。你能告诉我,到底有什么区别吗。?
In function 'int main()':    
24:80: error: could not convert '{{"BARECODE", {0, true}}, {"BARECODE2", {0, false}}}' from '<brace-enclosed initializer list>' to 'CodeInfos {aka std::map<std::basic_string<char>, CodeInfo>}'