struct led {
const int loc;
int state;
unsigned int stateDuration [];
int stateMode;
unsigned long timestamp;
} led1 = {D0, 0, {500}, 0, 0},
led2 = {D7, 0, {100, 900, 400}, 0, 0};
这给了我一个编译错误“太多的初始值设定项”(数组大小为0)。是否可以在结构中声明一个未大小的数组,然后使用不同的值(如我的示例)初始化它,或者我是否必须将数组显式声明为所需的最大大小?
答案 0 :(得分:2)
将未知绑定数组作为结构的非静态成员是非法的。 [class.mem] / 13
非静态数据成员不得有不完整的类型。
这是因为当达到右括号时必须知道类的大小。
也许你应该stateDuration
改为std::vector<unsigned int>
。
答案 1 :(得分:2)
您可以使用GCC,使用其C ++语言扩展,但只能使用结构的最后一个元素,因为字段的偏移必须是常量。 请参阅:https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html
GCC允许灵活数组成员的静态初始化。这相当于定义一个包含原始结构的新结构,后跟一个足够大小的数组来包含数据。例如。在下文中,f1被构造为好像它被声明为f2。
struct f1 { int x; int y[]; } f1 = { 1, { 2, 3, 4 } };
如果您正在使用其他东西,您仍然可以实现这个想法,但只能使用堆分配的对象(因此初始化程序块不可能),您将需要一个自己的new
运算符来处理动态的部分。 (也许delete
也许,我不确定)