错误 C2088: '+=': 在visual studio上用c联合是非法的。

问题描述 投票:0回答:1

嗨,我得到错误C2088:'+=':非法的联合错误在visual studio上...相同的代码在gcc上正常工作,你能不能让我知道解决这个问题在c与visual studio。

typedef union {
    float sm[8];
} Su;


typedef union {
    Su v;
    float bm[8];
} Bu;

int main() {
    Bu A1, A2;

    A2.v.sm[0] = 12.5;

    // .... some assignments here 

    A1.v += A2.v;     //      <<<<<<<<<<<< error here

    return 0;
}
c visual-studio-code structure union
1个回答
2
投票

v 成员 A1A2 是一个具有单个数组成员的联合类型 sm+= 没有为联合类型定义。 如果你想添加 A2.v.sm 的值。A1.v.sm,那么你就需要使用一个循环。

for ( size_t i = 0; i < 8; i++ )
  A1.v.sm[i] += A2.v.sm[i];

编辑

章节:

6.5.16.2 复合转让 限制因素 1 对于运营商 +=-= 只不过,要么左操作数应是一个原子型、限定型或未限定型的完整对象类型指针,右操作数应是整数型;要么左操作数应是原子型、限定型或未限定型的算术型,右操作数应是算术型。
© www.soinside.com 2019 - 2024. All rights reserved.