crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Тема закрытаНачать новую тему
> Не могу проинициализировать массив структур
novichkov
  опции профиля:
сообщение 16.1.2012, 12:00
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 64
Регистрация: 20.3.2008
Из: Северодвинск
Пользователь №: 128

Спасибо сказали: 6 раз(а)




Репутация:   1  


Подскажите, пожалуйста, как правильно записать структуру, в которой есть массив строк и проинициализировать ее. У меня:

static const struct Menu {
    const char *key;
    const char *text;
    const char *actions[];
}
menusDescr[] = {
    {"file", QT_TR_NOOP("&File"), {"addDir","addFiles","split","","save",
                                   "saveAll","rereadTags","delFiles",
                                   "delAllFiles","","exit",0}},
    {"edit", QT_TR_NOOP("&Edit"), {"","cut","copy","paste","copyToClipboard",
                                   "pasteFromClipboard","","removeTags",
                                   "newTag","","settings",0}},
     // и т.д.
};


компилятор ругается на const char *actions[] :
error: too many initializers for 'const char* [0]'


Хотя
const char *A[] = {"a","b","c"};

работает нормально.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 16.1.2012, 12:19
Сообщение #2


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


если ты хочешь объявлять массив, то у элеметров должен быть известный заранее размер и он должен быть фиксированным.
в данный момент компилятор считает, что это const char *actions[0].
поставь нужное количество элементов (оно должно быть фиксированным, иначе массив не получится).
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
novichkov
  опции профиля:
сообщение 16.1.2012, 13:27
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 64
Регистрация: 20.3.2008
Из: Северодвинск
Пользователь №: 128

Спасибо сказали: 6 раз(а)




Репутация:   1  


Тогда почему const char *A[] = {"aa","bbb","c"}; компилируется нормально?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ilyabvt
  опции профиля:
сообщение 16.1.2012, 18:35
Сообщение #4


Активный участник
***

Группа: Участник
Сообщений: 297
Регистрация: 23.6.2011
Пользователь №: 2765

Спасибо сказали: 45 раз(а)




Репутация:   3  


Цитата
Тогда почему const char *A[] = {"aa","bbb","c"}; компилируется нормально?

Потому что в этом случае вы создаете массив размером 3. Хотя вы не задаете размер массив явно, компилятор может его посчитать, если вы сразу инициализируете массив конкретными значениями.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 16.1.2012, 18:59
Сообщение #5


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


проблема не в размере массива, а в размере его элемента. так как массивы располагаются в памяти последовательно и каждый элемент массива имеет одинаковый тип (т.е. одинаковый размер). но у вложенного массива размер не определён явно и компилятор присваивает ему значение 0 (по умолчанию).

Сообщение отредактировал Iron Bug - 16.1.2012, 19:00
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
novichkov
  опции профиля:
сообщение 16.1.2012, 20:00
Сообщение #6


Студент
*

Группа: Участник
Сообщений: 64
Регистрация: 20.3.2008
Из: Северодвинск
Пользователь №: 128

Спасибо сказали: 6 раз(а)




Репутация:   1  


Спасибо за разъяснения. В итоге сделал так:

static const struct Menu {
    const char *key;
    const char *text;
    const char *actions;
}
menusDescr[] = {
    {"file", QT_TR_NOOP("&File"), "addDir,addFiles,split,,save,"
                                   "saveAll,rereadTags,delFiles,"
                                   "delAllFiles,,exit"},
    {"edit", QT_TR_NOOP("&Edit"), ",cut,copy,paste,copyToClipboard,"
                                   "pasteFromClipboard,,removeTags,"
                                   "newTag,,settings"},
     // и т.д.
};
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Тема закрытаНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 20.4.2024, 15:40