` 使用列表初始化?,c++,class,c++11,stdmap,list-initialization"/>

首页 > 解决方案 > 如何初始化`std::map` 使用列表初始化?

问题描述

我有一个带有字符串键和结构值的映射,我不知道为什么我不能使用初始化列表来实例化一个对象:

#include <string>
#include <map>    
using namespace std;

struct CodeInfo
{
    int _level = 0;
    bool _reactive;
};
typedef map<string, CodeInfo> CodeInfos; // Key is code name

int main()
{
    CodeInfos codes = { {"BARECODE", { 0, true }}, {"BARECODE2", { 0, false }} };

    return 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>}'

我在 C++11 中使用了编译器 g++ (GCC) 4.9.1 20140922 (Red Hat 4.9.1-10)。

标签: c++classc++11stdmaplist-initialization

解决方案


原因CodeInfo不是聚合,因为您_level = 0在类的定义中直接初始化数据成员之一()。

删除该成员的默认初始化将适用于 C++11。看这里

阅读这篇文章以获取有关聚合的更多信息:什么是聚合和 POD 以及它们如何/为什么特别?


推荐阅读