Ошибка GCC: тип массива имеет неполный тип элемента

Я пытаюсь создать таблицу модуля для своего приложения.

/*** MODULE TABLE DEFINTION ***/ 
struct ModuleInfo
{
 char use_module;     // 0 = don't use, 1 = use, -1 for end of list
 char module_name[64];    // english name of module
 int(*module_init)(void);   // module initialization callback
 void(*module_tick)(void);   // module tick callback
 void(*module_end)(void);   // module end callback
 void *config_table;     // config table
};

/*** MODULE TABLE ***/
const struct ModuleTable module_table[] = {
 {
  1, "GPS/NMEA over RS232",
  gps_nmea_rs232_init,
  gps_nmea_rs232_tick, 
  gps_nmea_rs232_end,
  NULL
 },
 // end table
 {
  -1, NULL, NULL, NULL, NULL
 } 
};

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

Я создаю это использование MPLAB C30, который является версией GCC 3.23 (я думаю?) для определенных микроконтроллеров PIC.

Однако, когда я пытаюсь скомпилировать это, я добираюсь:

In file included from main.c:3:

modules.h:67: error: array type has incomplete element type

Таблица должна быть константой, если возможный, потому что у меня есть много из (редактирование: ROM) запчасть и не очень (редактирование: RAM) запчасть. Я не могу выяснить, почему это не работает.

1
задан Thomas O 17 July 2010 в 18:52
поделиться

2 ответа

Собственно в этом и проблема ...

объявление

const struct ModuleTable module_table[] = ...

допустимой конструкцией C без явного определения struct ModuleTable; вот почему ваш код не работает, измените эту строку на

const struct ModuleInfo module_table[] = ... 
1
ответ дан 2 September 2019 в 22:58
поделиться
{
  -1, NULL, NULL, NULL, NULL
 } 

не хватает значения, не так ли? Я насчитал шесть полей в структуре.

1
ответ дан 2 September 2019 в 22:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: