C++ 将枚举(在结构中声明)值分配给结构中相同枚举类型的变量
我有一个以下类型的结构C++ 将枚举(在结构中声明)值分配给结构中相同枚举类型的变量,c++,c,struct,enums,C++,C,Struct,Enums,我有一个以下类型的结构 struct enumStruct { enum Number { zero = 0, one = 1 }; Number t; union { /* t = 0 */ some_struct_zero zero; /* t = 1 */ some_struct_one one; } un; } v_enumStruc
struct enumStruct
{
enum Number
{
zero = 0,
one = 1
};
Number t;
union
{
/* t = 0 */
some_struct_zero zero;
/* t = 1 */
some_struct_one one;
} un;
} v_enumStruct;
我可以按如下方式为v_enumStruct.t
赋值吗
v_enumStruct.t = v_enumStruct.zero;//Option 1
此外,下面的方法似乎不起作用
v_enumStruct.t = zero; //Option 2 - zero is mistaken as an unavailable variable name
1) zero
不是struct
的成员。2) struct
中的enum
没有声明任何成员。它可以在任何地方声明。枚举成员是命名常量,它们不是变量,3)Number
需要enum
限定符:
struct enumStruct
{
enum Number
{
zero = 0,
one = 1
};
enum Number t;
union
{
/* t = 0 */
some_struct_zero zero;
/* t = 1 */
some_struct_one one;
} un;
} v_enumStruct;
您还可以移动enum Number{..}代码>在struct
之外,因为它在struct内部没有做任何事情。现在,您应该能够分配:
v_enumStruct.t = zero;
我猜是“不”。你试过了吗?编译器是怎么想的?我试过了,选项1成功了!如果有什么像你在这里展示的那样,那么你有可能编译成C++而不是C。这是两种不同的语言。它确实是一个CPP头。那么,我应该理解这在C中可能不起作用吗?但是零被认为是枚举值,对吗?因此,理想情况下,结构内部的枚举也可以全局使用?参考:将enum作为sturct的成员是可以的。如果仔细查看链接的帖子,它将type
声明为struct MyStruct的成员。对代码的等效更改是:enum Number{zero=0,one=1}t代码>