嗨,我得到错误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;
}
该 v
成员 A1
和 A2
是一个具有单个数组成员的联合类型 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 对于运营商+=
和-=
只不过,要么左操作数应是一个原子型、限定型或未限定型的完整对象类型指针,右操作数应是整数型;要么左操作数应是原子型、限定型或未限定型的算术型,右操作数应是算术型。