C++ 如何访问成员enum';其他类别(c+;+;)的s
我需要访问属于另一个类的公共枚举,为了简化,类似这样:C++ 如何访问成员enum';其他类别(c+;+;)的s,c++,class,enums,nested,C++,Class,Enums,Nested,我需要访问属于另一个类的公共枚举,为了简化,类似这样: class obj { public: enum Type { t1, t2, t3 }; Type type; }; class otherObj { public: void setType(obj* o); }; void otherObj::setType(obj* o) { o->type = obj::Type::t
class obj
{
public:
enum Type
{
t1,
t2,
t3
};
Type type;
};
class otherObj
{
public:
void setType(obj* o);
};
void otherObj::setType(obj* o)
{
o->type = obj::Type::t1;
return;
}
我该怎么做,因为这条线
o->type = obj::Type::t1;
抛出一个错误:
obj::Type is not a class or namespace.
难道C++的枚举不是很棒吗?即使枚举可以被视为一种类型,这些值也属于它们上面的范围。您可以使用
obj::t1;
或者使用enum
声明指定
enum class Type {
t1,
t2,
t3
};
在C++03中,枚举值属于封闭范围。因此,将
obj::Type::t1
替换为obj::t1
将对您有效
这有点违反直觉,C++11中的
enum类
特性解决了这一问题,它将枚举值直接放在enum范围内。因此,如果您在符合C++11的编译器中使用enum类
,那么您将能够像当前一样使用obj::Type::t1
你的代码适合我。实际上添加class属性并没有解决它。它向我显示了一个警告,我正在使用C++11功能,但仍然不起作用。也许我需要在某个地方更改编译器设置?@V0ldek“它向我显示了一个警告,说明我正在使用C++11功能”如果您打开--std=C++11
来修复此问题,这是当前的标准。也许您应该寻找一个更为新近的C++编译器,它默认运行在这种模式下。
enum class Type {
t1,
t2,
t3
};