错误C2088:&x27+=';:visual studio上与c的联合是非法的
您好,我收到错误C2088:“+=”:visual studio上的联合错误非法。。。 对于 同样的代码在gcc上正常工作。 您能告诉我用visual studio在c中解决此问题的解决方案吗错误C2088:&x27+=';:visual studio上与c的联合是非法的,c,structure,union,C,Structure,Union,您好,我收到错误C2088:“+=”:visual studio上的联合错误非法。。。 对于 同样的代码在gcc上正常工作。 您能告诉我用visual studio在c中解决此问题的解决方案吗 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; // ..
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;
}
typedef联合{
浮动sm[8];
}苏,;
typedef联合{
苏五;
浮动bm[8];
}Bu;
int main(){
bua1,A2;
A2.v.sm[0]=12.5;
//这里有一些作业
A1.v+=A2.v;//的A1
和A2
的v
成员是具有单个数组成员的联合类型sm
,并且未为联合类型定义+=
。如果要将A2.v.sm
的值添加到A1.v.sm
的值中,则需要使用循环:
for ( size_t i = 0; i < 8; i++ )
A1.v.sm[i] += A2.v.sm[i];
(大小i=0;i<8;i++)的
A1.v.sm[i]+=A2.v.sm[i];
编辑
:
6.5.16.2复合赋值
约束
1对于运算符+=
和-=
,左操作数应为原子、限定或
指向完整对象类型的非限定指针,右侧应为整数类型;或
左操作数应具有原子、限定或非限定算术类型,右操作数应具有原子、限定或非限定算术类型
应具有算术类型。
A1
和A2
的v
成员是具有单个数组成员的联合类型sm
,并且未为联合类型定义+=
。如果要将A2.v.sm
的值添加到A1.v.sm
的值中,则需要使用循环:
for ( size_t i = 0; i < 8; i++ )
A1.v.sm[i] += A2.v.sm[i];
(大小i=0;i<8;i++)的
A1.v.sm[i]+=A2.v.sm[i];
编辑
:
6.5.16.2复合赋值
约束
1对于运算符+=
和-=
,左操作数应为原子、限定或
指向完整对象类型的非限定指针,右侧应为整数类型;或
左操作数应具有原子、限定或非限定算术类型,右操作数应具有原子、限定或非限定算术类型
应具有算术类型。
这不会在gcc上编译,也不应该。同样的代码在linux中的gcc中运行良好…当我将同样的代码移植到windows上有此问题的visual studio时。同样的代码在linux中的gcc中运行良好-。什么是A1.v+=A2.v;
甚至应该是什么意思?您希望这行代码做什么?投票以“无法复制”结束此操作因为它根本不会在gcc或任何其他C编译器上编译。这不会在gcc上编译,也不应该。同样的代码在linux中的gcc中运行良好…当我将同样的代码移植到windows上的visual studio时,出现了这个问题。同样的代码在linux中的gcc中运行良好-。什么是A1.v+=A2.v;
甚至应该是什么意思?你希望这一行是什么意思投票关闭它,因为“无法复制”,因为它根本不在gcc或任何其他C编译器上编译。