GCC错误:数组类型具有不完整的元素类型

时间:2010-07-17 18:52:58

标签: arrays mplab

我正在尝试为我的应用程序构建一个模块表。

/*** 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构建它,这是针对特定PIC单片机的GCC 3.23版本(我认为?)。

但是当我尝试编译时,我得到:

In file included from main.c:3:

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

如果可能的话,表应该是const,因为我有很多(编辑:ROM)备用,而不是(编辑:RAM)备用。我无法弄清楚为什么这不起作用。

2 个答案:

答案 0 :(得分:1)

{
  -1, NULL, NULL, NULL, NULL
 } 

缺少一个值,不是吗?我计算结构中的六个字段。

答案 1 :(得分:1)

实际上这就是问题......

宣布

const struct ModuleTable module_table[] = ...

是一个有效的C结构,没有明确定义struct ModuleTable;这就是你的代码失败的原因,将该行更改为

const struct ModuleInfo module_table[] = ...