枚举范围无法通过 C++ 中的类中的结构访问

  • 本文关键字:结构 访问 C++ 范围 枚举 c++
  • 更新时间 :
  • 英文 :


我在访问和初始化枚举和结构时遇到了一个问题,如前所述 有一个头文件定义为sample.h内容为

class MyClass{
enum M1 {
MY_VAL1 = 0, 
MY_VAL2,
MY_VAL3
};
enum M2 {
MY_VA1 = 0, 
MY_VA2,
MY_VA3
};

enum M3 {
MY_V1 = 0, 
MY_V2,
MY_V3
};
struct val {
M1 obj1;  
M2 obj2;
M3 obj3;
};  
};

在我初始化或访问的sample.cpp

#include "sample.h"
MyClass mObj = { {MY_VAL1}, {MY_VA1}, {MY_V1} };

但总是抱怨"MY_VAL1","MY_VA1","MY_V1"没有在范围内定义。

您的枚举类型不是公共的,并且您没有限定成员类型名称。 似乎您想要一些成员变量,而不是声明struct MyClass::val

class MyClass{
public:
enum M1 {
MY_VAL1 = 0, 
MY_VAL2,
MY_VAL3
};
enum M2 {
MY_VA1 = 0, 
MY_VA2,
MY_VA3
};

enum M3 {
MY_V1 = 0, 
MY_V2,
MY_V3
};
M1 obj1;
M2 obj2;
M3 obj3;
};
static const MyClass foo = { MyClass::MY_VAL1, MyClass::MY_VA1, MyClass::MY_V1 };

所有这些枚举都不是在 main 的作用域中定义的,而是在类中定义的。 使用范围解析运算符(即::(来解决这个问题。请注意,在您的情况下使用::仍然存在问题,因为enums是私有的。将它们更改为public,以便::正常工作。

... 
main(){
...
int x = MyClass::MY_VA1;
...
}

我没有使用您的示例,因为它给出了其他错误......

最新更新