c++ - 从父类访问 Enum 的语法

标签 c++ enums

我遇到一个程序错误。显然我遗漏了一些关于语法的东西。下面的 C++ 代码片段是产生错误的最小片段。

#include <iostream>
using namespace std;

class Parent
{
    public:
    enum MyEnum {
        Value1,
        Value2,
        Value3
    };

    MyEnum* set;
};

class Child: public Parent
{
    public:
    Child()
    {
      set = new MyEnum[5];
      set[0]=MyEnum.Value1;//<--Something wrong here
      set[1]=MyEnum.Value2;//<--Something wrong here
      set[2]=MyEnum.Value3;//<--Something wrong here
      set[3]=MyEnum.Value2;//<--Something wrong here
      set[4]=MyEnum.Value1;//<--Something wrong here
    }

    void Write()
    {
        for(int i=0;i<5;i++)
        {
            cout<< "This is " << i << ": " << set[i];
        }
    }
};

int main() {
    Child c;
    c.Write();

    return 0;
}

错误与指示的语法有关。

 expected primary-expression before ‘.’ token

Parent.MyEnum.Value1、Parent::MyEnum.Value1 等我都试过了,好像都不对。我应该如何引用父类中的具体值?

最佳答案

枚举不需要限定它们的值,这意味着您应该像这样访问它们:

set[0] = Parent::Value1;

如果您想强制限定,您可以使用强类型枚举。它看起来像这样:

enum struct MyEnum {
    Value1,
    Value2,
    Value3
};

set[0] = Parent::MyEnum::Value1;

但是你应该使用显式转换来打印它们,例如:

cout << static_cast<int>(set[0]) << endl;

关于c++ - 从父类访问 Enum 的语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46530435/

相关文章:

c++ - 我什么时候可以使用前向声明?

c++ - 用于理解高级概念的 C++ 书籍

generics - 在泛型方法中从联合式枚举中获取事件值

ios - swift 枚举 : perform code on value change?

c# - 无法将 Enum 转换为 Int

java - 将 ENUM 的值相加

c++ - sfml 中的着色器覆盖整个屏幕

c++ - 我一直在获取控制权到达非空函数的结尾。我究竟做错了什么?

c++ - 如何使用 giflib 从 gif 中提取图像到 C++ 中的 cv::Mat

c++ - 同一类中具有相同成员的许多枚举