5

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

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++ 给出错误。

4

2 回答 2

6

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

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

于 2010-10-29T05:53:19.020 回答
2

编译器尝试为union自身生成赋值运算符,但由于unionif 的活动字段未知而失败,因此它回退到对象的逐位副本。但是,它也不能这样做,因为struct { const int j; }它有一个非平凡的赋值运算符。

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

于 2010-10-29T05:53:28.943 回答