我需要访问属于另一个类的公共枚举,以简化这样的事情:
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.
答案 0 :(得分:1)
obj::t1
obj::t2
obj::t3
C ++的枚举不是很棒吗?即使可以将枚举视为一种类型,这些值也属于它们之上的范围。
答案 1 :(得分:0)
答案 2 :(得分:0)
在C ++ 03中,枚举值属于封闭范围。因此,将obj::Type::t1
替换为obj::t1
对您有用。
这有点违反直觉,并且由C ++ 11中的enum class
功能解决,它将枚举值直接放在枚举范围内。因此,如果在符合C ++ 11的编译器中使用enum class
,那么您将能够像当前一样使用obj::Type::t1
。