初始化结构数组中的结构数组

时间:2012-04-20 13:20:50

标签: c++ gcc struct object-initializers

给出以下代码:

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]'.

我该如何解决这个问题?感谢。

3 个答案:

答案 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