C++中constexpr聚合初始化含结构体数组的结构体报错求助
问题分析与解决
你犯了结构体定义与初始化逻辑不匹配的错误:
核心问题
你的SetpointChangesWeekSchedule结构体仅包含一个成员:weekChanges[2],这是一个长度为2的SetpointChangeTime_t数组。但你的初始化代码却按照「包含两个dayChanges[4]数组」的结构编写,相当于给一个只能容纳2个元素的数组塞了4个元素,还多套了一层不必要的嵌套结构,直接触发了编译器的「初始化器过多」错误。
两种修正方案
方案1:修正初始化代码(匹配现有结构体定义)
如果你的结构体定义是符合需求的,只需初始化weekChanges数组的2个元素即可:
static constexpr SetpointChangesWeekSchedule defaultSchedule = { { {0, 0}, // weekChanges[0] {0, 0} // weekChanges[1] } };
方案2:修正结构体定义(匹配你的初始化逻辑)
如果你的实际需求是让周计划包含两个日计划(每个日计划有4个时间点),需要修改SetpointChangesWeekSchedule的定义:
typedef struct SetpointChangesWeekSchedule { SetpointChangesDaySchedule_t daySchedules[2]; // 改为存储两个日计划结构体 } SetpointChangesWeekSchedule_t;
此时你的原初始化代码就能正常工作,因为它正好对应两个SetpointChangesDaySchedule_t(每个包含4个SetpointChangeTime_t)。
额外优化提示
C++中建议直接使用struct定义,无需typedef,代码更简洁直观:
struct SetpointChangeTime { uint8_t hours; uint8_t minutes; }; struct SetpointChangesDaySchedule { SetpointChangeTime dayChanges[4]; }; struct SetpointChangesWeekSchedule { SetpointChangeTime weekChanges[2]; };
内容的提问来源于stack exchange,提问作者Alex C
相关产品推荐
相关产品推荐

