c++ - 在结构中使用结构数组时在标量初始值设定项周围加括号

标签 c++ arrays struct initialization list-initialization

我正在尝试制作一个简单的菜单。为此,我想使用一个结构,即 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,
        }
    }
};

但是我总是报错

braces around scalar initializer for type 'const menuitem_t*'

最佳答案

... when using array of struct in a struct

您没有结构数组。您有一组指向结构的指针

要创建 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 char*,或使用可变 char 数组。

关于c++ - 在结构中使用结构数组时在标量初始值设定项周围加括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57309384/

相关文章:

php - 多维索引数组到关联数组取决于列值

C 使用指针遍历 char 数组

c++ - 如何从指向空的指针复制结构?

c++ - 按值传递给引用参数

c++ - Python Pandas 与 C++ 文本 CSV 数据导入解决方案的性能对比

c++ - 在内存中渲染用户界面

c++ - GDIPlus::位图亮化图像 C++

javascript - JS 对象结构化和添加

c - 为什么在 Objective-C 的结构中使用函数指针?

swift - 是否可以在 Swift 4 中使用变量访问结构成员?