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

时间:2015-03-08 14:03:01

标签: 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::t1;
    return;
}

我该怎么做,因为行

o->type = obj::Type::t1;

抛出错误:

obj::Type is not a class or namespace.

3 个答案:

答案 0 :(得分:1)

obj::t1
obj::t2
obj::t3

C ++的枚举不是很棒吗?即使可以将枚举视为一种类型,这些值也属于它们之上的范围。

答案 1 :(得分:0)

你要么只是使用

obj::t1;

或使用enum声明

指定class attribute
enum class Type {
    t1,
    t2,
    t3
};

答案 2 :(得分:0)

在C ++ 03中,枚举值属于封闭范围。因此,将obj::Type::t1替换为obj::t1对您有用。

这有点违反直觉,并且由C ++ 11中的enum class功能解决,它将枚举值直接放在枚举范围内。因此,如果在符合C ++ 11的编译器中使用enum class,那么您将能够像当前一样使用obj::Type::t1