cpp слишком много инициализаторов - структура в структуре в массиве - PullRequest
0 голосов
/ 11 июля 2019

Я новичок в cpp уже несколько дней и борюсь со следующим определением:

struct menuItem {
    char* name;
    int value;
};

struct topMenu {
    int menuIcon;
    char* Name;
    menuItem item[];
};

topMenu menuRoot[] = {
    { 0, "File", 
        {"Open ...", 1},
        {"New ...", 4},
        {"Close", 1},
        {"Exit", 3}

    },
    { 0, "Edit", 
        {"Cut ", 3},
        {"Copy", 8},
        {"Paste", 2},
        {"Find", 1},
        {"Replace", 6}

    },
    { 0, "Help", 
        {"Help", 7},
        {"About", 9},
        {"Update ..", 9}
    }  
};

получаю ошибку

33:1: error: too many initializers for 'menuItem [0]'
33:1: error: too many initializers for 'topMenu'
33:1: error: too many initializers for 'menuItem [0]'
33:1: error: too many initializers for 'topMenu'
33:1: error: too many initializers for 'menuItem [0]'
33:1: error: too many initializers for 'topMenu'

Извините, я немного застрял ... может быть, это слишком поздно :) Заранее спасибо.

1 Ответ

1 голос
/ 11 июля 2019

Во-первых, оберните массив menuItem item [] в {}, потому что в настоящее время он считает, что существует множество массивов, а не только один.

Затем измените char * на const char *, как уже упоминалось.

Теперь для гибкого количества структур menuItem используйте вектор, а не массив.

#include <vector> 

struct menuItem {
    const char *name;
    int value;
};

struct topMenu {
    int menuIcon;
    const char *Name;
    std::vector<menuItem> item;
};

topMenu menuRoot[] = {
    { 0, "File", {
        {"Open ...", 1},
        {"Open ...", 1},
        {"Open ...", 1},
        {"Open ...", 1},
    }
    },
    { 0, "Help", {
        {"Open ...", 1},
        {"Open ...", 1},
        {"Open ...", 1}, }
    }
};
...