2012-03-25 8 views
0

Я пытаюсь инициализировать массив внутри набора struct для всех нулей.Инициализация массива нулей в struct вызывает ошибку

typedef struct month { 
    char name[19]; 
    int yearCounts[10] = { 0 }; 
    struct month *next; 
} MONTH; 

Компилятор, похоже, не хочет позволять мне устанавливать yearCounts для значений внутри структуры. Я получаю старую ошибку: "ожидали: A, A, A, A, A, A} â или â_attribute_â, прежде чем а = маркер"

Это мне кажется странным, потому что точная декларация за пределами структуры по-видимому, работает очень хорошо. Если я инициализирую массив, не пытаясь установить его значения, он тоже работает.

Я пропустил что-то глупое, или мне просто не разрешено инициализировать массив со значениями внутри определения структуры?

Я компилирую с использованием gcc в стандарте C89, если это имеет значение.

+0

это возможно только в C++ –

+1

можно только инициализировать объекты (не в смысле ООП). Typedef определяет тип, а не объект. – pmg

ответ

3

Am I missing something stupid, or am I just not allowed to initialize an array with values inside a structure definition?

Инициализаторы не имеют смысла в декларациях структуры.

0

В качестве typedef используется только определение MONTH (а не фактическое объявление экземпляра переменных типа MONTH), для инициализации нет ничего.

typedef struct month { 
    char name[19]; 
    int yearCounts[10]; 
    struct month *next; 
} MONTH; 

/* declare month as MONTH and initialise it to all zeros. */ 
MONTH month = {0}; 
+0

Спасибо, кучка. Я имел в виду, что если бы я просто объявил это в определении, это произойдет автоматически, когда я инициализирую новый. – fmdub

2

Вы не можете указать инициализацию как часть определения типа. Вы должны ждать, чтобы инициализировать, пока вы не определите объект такого типа. С компилятором C89/90 нет реального способа инициализировать yearCounts без предварительной инициализации name. В C99 или новее, вы можете использовать назначенный инициализатор для инициализации только yearCounts:

MONTH m = { .yearCounts = {0} }; 
+0

Очень понятный для начинающего студента, как я. Благодарю. – fmdub

+0

Возможно, также добавьте, что с этим синтаксисом все остальные поля также инициализируются на '0', так как это значение по умолчанию. –

Смежные вопросы