我有一个带有 string 键和 struct 值的映射,我不知道为什么不能使用a list of initializers实例化对象:>
#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)。
答案 0 :(得分:3)
原因是CodeInfo
未聚合,因为您正在类的定义中直接初始化数据成员之一(_level = 0
)。
删除该成员的default initialization将适用于C ++ 11。 See here
阅读此帖子以获取有关聚合的更多信息:What are Aggregates and PODs and how/why are they special?