如何访问其他类的成员枚举 (c++)



我需要访问属于另一个类的公共枚举,为了简化,如下所示:

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

最新更新