union初始化程序“错误:在'。'标记之前预期的primary-expression”

时间:2014-08-18 11:50:01

标签: c++ initialization initializer-list

我试图用其他人编写的c ++编译器来编译c代码,我总是得到这个"错误:在'。'令牌之前预期的primary-expression。"在这种情况下如何初始化联合?提前谢谢。

union v16b {
    v16qi v;
    uint8_t b[16];
    uint32_t dw[4];
};

union v8w {
    v8hi v;
    int16_t w[8];
};

union v2qw {
    v2di v;
    uint64_t uq[2];
};

static inline void sd(v16qi a, v16qi b, v16qi c, v16qi d, uint16_t local_mean[4], int16_t *response)
{
    const union v16b zero = { .b = { 0 }};

    const union v16b shuf = { .b = { 0, 4, 8, 12, 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15 }};
......
}

1 个答案:

答案 0 :(得分:4)

C ++不支持使用指示符进行初始化。所以这句话

const union v16b zero = { .b = { 0 }};

在C ++中有语法错误。

C中采用了这种语法。因此,要么将程序编译为C程序,要么根据C ++的语法更改此定义。

如果需要初始化此数据成员,请编写构造函数。例如

union v16b {
    v16b() : b { 0 ) {}
    v16qi v;
    uint8_t b[16];
    uint32_t dw[4];
};