C++ 错误:联合中不允许复制分配运算符

C++ 错误:联合中不允许复制分配运算符,c++,struct,unions,C++,Struct,Unions,当出现以下错误时,我正在编译下面的代码。我找不到原因 typedef union { struct { const int j; } tag; } X; int main(){ return 0; } 错误:联合中不允许使用带有复制赋值运算符的成员“::”::标记 这段代码使用gcc编译罚款。仅在g++中给出错误。为了拥有某类类型的联合的成员T,T,其特殊成员函数(默认构造函数、复制构造函数、复制赋值运算符和析构函数)必须非常简单。也就是说,它们必须是由

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

typedef union  {
   struct {
     const  int j;
   } tag;
} X;


int main(){
    return 0;
}
错误:联合中不允许使用带有复制赋值运算符的成员“::”::标记

这段代码使用gcc编译罚款。仅在g++中给出错误。

为了拥有某类类型的联合的成员
T
T
,其特殊成员函数(默认构造函数、复制构造函数、复制赋值运算符和析构函数)必须非常简单。也就是说,它们必须是由编译器隐式声明和定义的


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

编译器尝试为
联合
本身生成赋值运算符,但失败,因为
联合
的活动字段如果未知,则返回到对象的逐位复制。但是,它也不能这样做,因为
struct{const int j;}
有一个非平凡的赋值运算符

error: member `<`anonymous union>::`<`anonymous struct> `<`anonymous union>::tag with copy assignment operator not allowed in union