我在访问和初始化枚举和结构时遇到了一个问题,如前所述 有一个头文件定义为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;
...
}
我没有使用您的示例,因为它给出了其他错误......