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