c++ - 在结构中使用结构数组时标量初始化器周围的大括号
问题描述
我正在尝试制作一个简单的菜单。为此,我想使用一个结构,它是 Menu 并包含一个菜单项的结构数组。
主菜单 - 程序 - 设置
菜单项包含一些进一步的信息,如回调。
struct menu_t {
char* text;
const uint32_t num;
const struct menuitem_t *contents[MAX_MENU_CONTENTS];
};
struct menuitem_t {
char* text;
uint8_t type;
void (*callback)(void);
}
static const struct menu_t mainMenu[] = {
.name = "Main Menu",
.num = 3,
.contents = {
{
.text = "Programms",
.type = MENU_SUB,
.callback = 0,
},
{
.text = "Settings",
.type = MENU_SUB,
.callback = 0,
}
}
};
但我总是得到错误
'const menuitem_t*' 类型的标量初始值设定项的大括号
解决方案
...在结构中使用结构数组时
您没有结构数组。你有一个指向结构的指针数组。
要创建 N 个对象,您需要这些对象的数组。例如在这种情况下:
static const struct menuitem_t menu_items[MAX_MENU_CONTENTS] {
{
.text = "Programms",
.type = MENU_SUB,
.callback = 0,
},
{
.text = "Settings",
.type = MENU_SUB,
.callback = 0,
},
};
如果您不想将这些对象存储在类中,则可以初始化指向该数组中对象的指针:
static const struct menu_t mainMenu[] = {
.name = "Main Menu",
.num = 3,
.contents = {
menu_items + 0,
menu_items + 1,
},
};
您的程序的其他问题:
menu_t
没有成员.name
,但您尝试对其进行初始化。你的意思是.text
?- 指定的初始化程序还不是任何已发布的 C++ 标准的一部分。它们将在即将到来的 C++20 中引入。
char*
不能用字符串字面量初始化(从 C++11 开始;在此之前不推荐使用转换),因为字符串字面量在 C++ 中是 const。将成员更改为const char*
,或使用可变字符数组。
推荐阅读
- parsing - 使用 Ansible 在结构化文件中查找值
- maven - Maven 版本插件跳过了一些依赖项
- r - 使用 perm.t.test 的多对排列 t 检验
- python-3.x - 在google colab或kaggle notebook环境中安装pywin32包
- node.js - 无法使用 ClusterIP 服务与 postgres 建立连接
- excel - VBA如果单元格中的值在其他单元格中显示字符串
- angular - 如何在依赖于另一个组件的主导航组件(即持有路由器出口)的角度组件中加载患者列表
- apache-spark - 如何在 EMR 中为任务节点添加自定义节点标签
- sql - Postgresql 将多行组合成多列
- c++ - 为什么无论分配给变量 a 的值如何,我总是得到 1 作为答案