c/c++语言开发共享结构中的枚举; 新手在交流

我想知道在struct中使用enum的语法( C

我已经看过各种例子,其中使用struct + union / enum组合来创建复杂类型,例如:

 struct MyStruct{ enum{ TYPE_1, TYPE_2, TYPE_3, } type; union{ int value_1; int value_2; int value_3; } value; }; // ... struct MyStruct test_struct; 

无论如何,从这个例子中,我如何根据enum字段存储/测试当前的“类型”?

如果我有一个指向test_struct的指针,这似乎不起作用; 踢回未知成员错误:

 struct MyStruct *test_pointer = &test_struct; test_pointer->value = test_pointer->VALUE_1; 

我只是好奇,我需要将enum值作为全局值来访问吗?

 test_pointer->value = VALUE_1; 

任何澄清将不胜感激。

    这种结构的预期用法是这样的:

     switch (test_struct.type) { case TYPE_1: printf("%d", test_struct.value.value_1); break; case TYPE_2: printf("%d", test_struct.value.value_2); break; case TYPE_3: printf("%d", test_struct.value.value_3); break; } 

    请注意,大写VALUE_1VALUE_2VALUE_3是不正确的,因为它们不是常量,而是联合的成员。

    TYPE_1TYPE_2TYPE_3将是全局可访问的,无论相应的enum位于结构中。

    联合发生的事情是其中定义的所有对象占用相同的内存。 读取与最后写入的对象不同的对象是非法的。

     union blah { int bleh; double blih; char bloh[42]; }; union blah myobject; 

    myobject包含intdoublechar[] 。 而且没有迹象表明哪一个是正确的。 该指示必须由程序员保存在其他地方:

     int lastblahwrite; /* 0: int; 1: double; 2: char[] */ strcpy(myobject.bloh, "The quick brown dog"); lastblahwrite = 2; 

    以后这可以用作

     switch (lastblahwrite) { case 0: printf("%dn", myobject.bleh); break; case 1: printf("%fn", myobject.blih); break; case 2: printf("%sn", myobject.bloh); break; default: assert(!"this didn't happen"); break; } 

    为了使管理更容易,不如使用两个单独的变量,通常将union本身和指示符变量分组到结构中,如示例所示。

    管理层仍然必须由程序员编写。 没有什么是自动的。

      以上就是c/c++开发分享结构中的枚举; 新手在交流相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/541690.html

      (0)
      上一篇 2021年1月3日
      下一篇 2021年1月3日

      精彩推荐