c++ - 如何初始化`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)。
解决方案
原因CodeInfo
不是聚合,因为您_level = 0
在类的定义中直接初始化数据成员之一()。
阅读这篇文章以获取有关聚合的更多信息:什么是聚合和 POD 以及它们如何/为什么特别?
推荐阅读
- c# - 解密使用无 IV 的 AES-128 加密的 M3U8 播放列表
- r - 绘制多个图,旁边有其他图的图例
- android - AccountManager:什么时候设置结果?
- batch-file - 批处理文件设置命令在 if 语句中不起作用
- python - requests.get() Python 2 上的数据丢失
- gdb - [Atollic Truestudio][STM32] 使用 CMSIS-pack/Components 下载/调试 GDB 时“加载失败”
- google-chrome - 无法删除特定命名的 cookie(Selenium WebDriver、C#、Chrome)
- c# - 如何创建表达式
> 没有显式的 TProperty 类型 - asp.net - 自定义索引 Swashbuckle/Swagger
- java - 休眠返回空对象