c++ - union Initializer "error: expected primary-expression before ‘.’ token ”

标签 c++ initialization initializer-list

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

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++ 不支持使用指示符进行初始化。所以这个声明

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++ - union Initializer "error: expected primary-expression before ‘.’ token ”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25362638/

相关文章:

c++ - 亲爱的 IMGUI 和 DirectX 12 覆盖 (DXGI_ERROR_INVALID_CALL)

C静态变量和初始化

c++ - 这个 C++ 成员初始化行为是否定义良好?

java - Generic List 的 Generic List 的初始化

c++ - 为什么在调用不明确的ctor时没有编译时错误?

c++ - 性能提升 C++

c++ - QMainWindow 正在处理应该被 QDialog 捕获的事件

c++ - 通过使用仿函数数组摆脱 switch case

c++ - 初始化列表没有合适的默认构造函数可用错误

C# Initializer list - 什么时候在类名后使用 () 运算符?