当下面的错误出现时,我正在编译下面的代码。我无法找到原因。
typedef union {
struct {
const int j;
} tag;
} X;
int main(){
return 0;
}
error: member `<`anonymous union>::`<`anonymous struct> `<`anonymous union>::tag with copy assignment operator not allowed in union
此代码使用gcc编译罚款。仅使用g ++提供错误。
答案 0 :(得分:6)
为了拥有某个类类型T
的联合的成员,T
的特殊成员函数(默认构造函数,复制构造函数,复制赋值运算符和析构函数)必须是微不足道的。也就是说,它们必须是编译器隐式声明和定义的那些。
你的未命名结构没有一个简单的复制赋值运算符(事实上,它根本没有一个)因为它有一个const
成员变量 - 限定,它会抑制隐式声明的生成复制赋值运算符。
答案 1 :(得分:2)
编译器尝试为union
本身生成赋值运算符,并且因为union
的活动字段(如果未知)而失败,因此它会回退到比特的逐位副本物体。但是,它也不能这样做,因为struct { const int j; }
有一个非平凡的赋值运算符。