2016-08-24 5 views
-5

В настоящее время я работаю над файловой структурой EEprom, которая заполняется значениями по умолчанию при компиляции. Все прекрасно работает до сих пор для одной структуры, за исключением, и я не могу найти ошибку ..слишком много инициализаторов для struct

typedef struct { // ===== instance parameters ===== 
     BOOL bInstanceActive; 
     BYTE nInstanceGrp[4]; 
     BYTE nEventFilter; 
     BYTE nEventScheme; 
     BYTE nEventPriority; 
     BYTE nShortMul; 
     BYTE nDoubleMul; 
     BYTE nRepeatMul; 
     BYTE nStuckMul; 
     BYTE nDummy[3]; 
    } InstanceBlock; 
#define DEFAULT_INSTANCE_BLOCK {1, {255,255,255,255}, 244, 0, 2, 15, 5, 10, 30, {0}} 

Типы «BOOL» и «BYTE» оба неподписанные символ.

различные структуры являются затем объединены в одну EEprom_Mapping структуры (но я в настоящее время только этот в нем, все остальные работают нормально):

typedef struct { 
    InstanceBlock xInstance[1]; ** edited should be 1 instead of 0 
    } EEprom_Mapping; 
#define DEFAULT_EEprom_Mapping { DEFAULT_INSTANCE_BLOCK } 

Затем он инициализируется следующим образом:

EEprom_Mapping xEE __attribute__((section(".eeprom"))) = DEFAULT_EEprom_Mapping; 

Сообщение об ошибке «слишком много инициализаторов для« InstanceBlock [0] »«

Заранее благодарим за любую помощь.

+2

Что это - C или C++? – molbdnilo

+2

Ну, один больше нуля. Во всяком случае, C++ не разрешает автоматические массивы хранения с нулевой длиной. – juanchopanza

+1

Пожалуйста, правильно пометьте язык: вот почему этот хороший вопрос остается без изменений. – Bathsheba

ответ

0

Для вашего второго скрытого вопроса, с 4-х элементами, вы пропустите некоторые скобки:

// Note double brackets 
#define DEFAULT_EEprom_Mapping {{ DEFAULT_INSTANCE_BLOCK, DEFAULT_INSTANCE_BLOCK, DEFAULT_INSTANCE_BLOCK, DEFAULT_INSTANCE_BLOCK }} 

Demo

Действительно, xInstance является массивом внутри структуры, так что вам нужна скобка для списка инициализации структуры и скобки для списка инициализаций массива.

+0

Большое спасибо за это, теперь работает! – Maku

1

Ваш массив xInstance представляет собой массив размером 0, поэтому компилятор жалуется, потому что вы пытаетесь установить в нем один элемент.

+0

Ничего себе, извините, я глуп. Это исправляет проблему для одного блока, но если я попробую то же самое с 4 блоками с xInstance [4] и 4 блоками в DEFAULT_EEprom_Mapping, я получаю такую ​​же ошибку. – Maku

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