我需要访问属于另一个类的公共枚举,为了简化,如下所示:
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.
obj::t1
obj::t2
obj::t3
C++枚举不是很好吗?这些值落在它们上面的范围内,即使枚举可以被视为一个类型。
你要么只使用
obj::t1;
或者在enum
声明中指定 class
属性
enum class Type {
t1,
t2,
t3
};
在 C++03 中,枚举值属于封闭范围。因此,用obj::t1
替换obj::Type::t1
对您有用。
这有点违反直觉,C++11 中的 enum class
功能解决了这个问题,该功能将枚举值直接放在枚举范围内。因此,如果在兼容 C++11 的编译器中使用enum class
,则可以像当前一样使用obj::Type::t1
。