联合初始化程序“错误:‘。’标记之前的预期主表达式”

Posted

技术标签:

【中文标题】联合初始化程序“错误:‘。’标记之前的预期主表达式”【英文标题】:union Initializer "error: expected primary-expression before ‘.’ token" 【发布时间】:2014-08-18 11:50:01 【问题描述】:

我正在尝试使用其他人编写的 c++ 编译器编译 c 代码,我总是得到这个“错误:在‘.’标记之前的预期主表达式。”在这种情况下如何初始化联合?提前致谢。

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 ;
......

【问题讨论】:

C++ 不支持 C99 (link) 的指定初始化语法。 将 C 代码提供给 C++ 编译器通常不是一个好主意。最好将其编译为 C 并与使用它的 C++ 链接。 【参考方案1】:

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];
;

【讨论】:

以上是关于联合初始化程序“错误:‘。’标记之前的预期主表达式”的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 中初始化向量 [重复]

如何使用三元运算符有条件地初始化 const char* arr[]

使用 `` 在 C++ 中聚合初始化联合

关于c语言中联合体/共用体中数据存放的问题?

C++11 空列表初始化联合 - 是不是保证初始化联合的全长?

c 结构的初始化,包括联合