Я использую VS2013. Вся программа C, а не C++.Использование назначенных инициализаторов для инициализации инициализатора массива 2D-символов в структуре испускает ошибку C2078 в VS2013
я могу инициализировать «массив строк», как это без каких-либо проблем:
char titles[4][80] = { "Dad", "Idiot", "Donut Lover", "Fewl" }; // OK!
У меня есть структура объявлен как это:
typedef struct
{
char name[80];
char titles[4][80];
} Dude;
Когда я пытаюсь инициализировать-структуру, как это :
Dude homer =
{
.name = "Homer",
.titles = { "Dad", "Idiot", "Donut Lover", "Fewl" } // error?
};
У меня ошибка «C2078: слишком много инициализаторов». Это из-за инициализации массива. Если я удалю строку .titles = { ...
, ошибка исчезнет. Почему я получаю эту ошибку? Есть ли другой способ выполнить инициализацию этого типа в инициализаторе структуры?
Если изменить декларацию структуры, чтобы посмотреть, как этот
typedef struct
{
char name[80];
char *titles[4];
} Dude;
ошибка уходит. Это, однако, не изменение, которое я могу сделать. Другие части базы кода требуют, чтобы размер этой структуры составлял ровно 400 байт.
Кроме того, я вполне знаю, что я мог бы использовать strcpy
для заполнения каждого поля, но это не отвечает на мой вопрос.
попробовать 'Dude Гомер = { "Гомер" , {«Папа», «Идиот», «Пончик-любовник», «Fewl»} }; ' – BLUEPIXY
AFAIK, VS2013 использует C89 и C89, не поддерживает использование' {.item = ...} '. (Разве нет имени для этого?). GCC дает 'предупреждение: ISO C90 запрещает указывать подобъект для инициализации [-Wpedantic]', который показывает, что он не поддерживается на C89. –
Я использую кодовые блоки для компиляции, и это нормально. Я думаю, это проблема VS .. Я обновил ваш вопрос, чтобы включить теги 'VS' и' VS2013' – Ian