给出以下代码:
struct BufferPair
{
ByteBuffer _a;
ByteBuffer _b;
bool _c;
};
struct TestData
{
MyClass _myClass;
BufferPair _data[];
};
我正在尝试初始化TestData数组,我还初始化了一个BufferPair数组。每个TestData实例都有不同大小的BufferPair数组。简化示例:
const TestData g_Data[] = { MyClass(), { { bufOne, bufTwo, someBool }, { bufThree, bufFour, anotherBool } } };
尝试此操作时,我收到以下gcc错误:
error: too many initializers for 'BufferPair [0]'.
我该如何解决这个问题?感谢。
答案 0 :(得分:2)
struct TestData
{
MyClass _myClass;
BufferPair _data[];
};
上面代码中的 _data
不是一个完整的类型(它缺少数组的大小),并且不允许在C ++标准中声明成员是不完整的类型:
9.2p10
非静态(9.4)数据成员不得有不完整的类型。
这似乎是作为gcc中语言的扩展而编译的。现在它仍然无法编译变量的定义,因为数组没有大小,并且您正在尝试初始化其中的成员。
答案 1 :(得分:1)
你没有写出数组BufferPair[]
的大小 - 它是零,所以你不能用值填充它。
尝试BufferPair[2]
,看看是否能解决问题。
答案 2 :(得分:0)
如其他答案中所述,您无法在没有长度的情况下初始化数组。 唯一的方法是使用"长度1技巧"在运行时初始化结构。 (如果您正在使用gcc,则为长度为0的技巧)。
有关如何执行此操作的详细信息,请参阅此帖子 Allocating struct with variable length array member