【问题标题】:Assign enum(declared inside a struct) value to a variable of the same enum type inside the struct将枚举(在结构内声明)值分配给结构内相同枚举类型的变量
【发布时间】:2014-05-12 10:23:12
【问题描述】:

我有以下类型的结构

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 奏效了!
  • 如果有什么像你在这里展示的那样工作,你很有可能将它编译为 C++ 而不是 C。这是两种不同的语言。
  • 确实是cpp头。那么,我应该明白这在 C 中可能不起作用吗?

标签: c++ c struct enums


【解决方案1】:

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 之外,因为它在结构内没有做任何事情。现在你应该可以分配了:

v_enumStruct.t = zero; 

【讨论】:

  • 但是零被认为是枚举值对吧?那么,理想情况下,结构内部的枚举也应该可以在全球范围内使用?参考:stackoverflow.com/questions/5902744/…
  • 将枚举作为 sturct 的成员 是可以的。如果您仔细查看链接的帖子,它会将type 声明为 struct MyStruct 的成员。您的代码的等效更改是:enum Number { zero = 0, one =1 }t;
猜你喜欢
  • 2011-12-04
  • 2014-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-02
相关资源
最近更新 更多