gpt4 book ai didi

c++ - 如何使用列表初始化来初始化 `std::map`?

转载 作者:行者123 更新时间:2023-11-30 02:17:21 26 4
gpt4 key购买 nike

我有一个带有 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>}'

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

最佳答案

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

删除 default initialization该成员的一部分将使用 C++11。 See here

阅读这篇文章以获取有关聚合的更多信息:What are Aggregates and PODs and how/why are they special?

关于c++ - 如何使用列表初始化来初始化 `std::map<std::string, CodeInfo>`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53703897/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com