2

给定以下代码:

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

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

4

3 回答 3

2
struct TestData
{
    MyClass _myClass;
    BufferPair _data[];
};

_data上面代码中的不是完整类型(它缺少数组的大小),并且在 C++ 标准中不允许将成员声明为不完整类型:

9.2p10

非静态 (9.4) 数据成员不应有不完整的类型。

这似乎编译为 gcc 中语言的扩展。现在它仍然无法编译变量的定义,因为数组没有大小并且您正在尝试初始化其中的成员。

于 2012-04-20T13:27:19.087 回答
1

你没有写数组的大小BufferPair[]——它是零,所以你不能用值填充它。

试试看BufferPair[2]这是否能解决问题。

于 2012-04-20T13:26:24.350 回答
0

如其他答案所述,您无法初始化没有长度的数组。做到这一点的唯一方法是在运行时使用“长度 1 技巧”(如果您使用 gcc,则使用长度 0 技巧)初始化结构。

有关如何 使用可变长度数组成员分配结构的更多信息,请参阅这篇文章

于 2012-04-20T13:31:48.697 回答