错误:联合中不允许使用复制赋值运算符

时间:2010-10-29 05:44:09

标签: c++ struct unions

当下面的错误出现时,我正在编译下面的代码。我无法找到原因。

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 ++提供错误。

2 个答案:

答案 0 :(得分:6)

为了拥有某个类类型T的联合的成员,T的特殊成员函数(默认构造函数,复制构造函数,复制赋值运算符和析构函数)必须是微不足道的。也就是说,它们必须是编译器隐式声明和定义的那些。

你的未命名结构没有一个简单的复制赋值运算符(事实上,它根本没有一个)因为它有一个const成员变量 - 限定,它会抑制隐式声明的生成复制赋值运算符。

答案 1 :(得分:2)

编译器尝试为union本身生成赋值运算符,并且因为union的活动字段(如果未知)而失败,因此它会回退到比特的逐位副本物体。但是,它也不能这样做,因为struct { const int j; }有一个非平凡的赋值运算符。

请参阅http://gcc.gnu.org/ml/gcc-help/2008-03/msg00051.html