struct的初始化项太多

too many initializers for struct

本文关键字:太多 初始化 struct      更新时间:2023-10-16

我目前正在研究一个EEprom文件结构,该结构在编译时填充了默认值。到目前为止,除了一个结构外,所有工作都很好,我似乎找不到错误。

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"answers"BYTE"都是unsigned char。

不同的结构体然后组合成一个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]的初始化项太多"

提前感谢您的帮助。

您的数组xInstance是一个大小为0的数组,因此编译器会报错,因为您试图在其中放入一个元素

对于第二个隐藏问题,有4个元素,您错过了一些括号:

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

演示

实际上,xInstance是结构体内部的数组,因此需要为结构体的初始化列表和数组的初始化列表使用方括号。