在类里边声明的枚举类型为什么不能作为类的函数返回类型呢

在类里面声明的枚举类型为什么不能作为类的函数返回类型呢?
在类里面声明的枚举类型为什么不能作为类的函数返回类型呢?

enum T
{
A = 0,
B,
C
};

class cls
{
public:
T Func()
{
return B;
}
};

可通过

class cls
{
enum T
{
A = 0,
B,
C
};
public:
T Func()
{
return B;
}
};

不通过

------解决方案--------------------
返回值是需要给外部使用的。
而定义的枚举放在类内部,外部都不知道有这个枚举。报错是应该的。


------解决方案--------------------
相当于是类私有的,外面看不见此类型。
------解决方案--------------------
引用:
返回值是需要给外部使用的。
而定义的枚举放在类内部,外部都不知道有这个枚举。报错是应该的。


想当然了。看到2楼,我这边试着编译,也是可以通过的。~~在类里边声明的枚举类型为什么不能作为类的函数返回类型呢
------解决方案--------------------
第2段代码,把enum的定义丢到public下,后面就可以用cls::T 来引用了.
你这样写枚举是私有的.
------解决方案--------------------
class cls
{
//public:
    enum T
    {
        A = 0,
        B,
        C
    };
public:
    T Func()
    {
        return B;
    }
};

int main()
{
cls c;
c.Func(); // 这样可以
cls::T t=c.Func(); // 这样不行,私有的不能拿出来用
return 0;
}

------解决方案--------------------
引用:
第二段代码枚举是私有的,但是Func也是类的成员函数啊,成员函数应该可以引用私有数据啊


那得这样

class cls
{
//public:
    enum T
    {
        A = 0,
        B,
        C
    };
public:
    T Func()
    {
        return B;
    }

void hanshu()
{
T t=Func(); // 在类内部可以
}
};

------解决方案--------------------
定义成public类型的enum,外面这样:cls::T

class cls
{
public:
    enum T
    {
        A = 0,
        B,
        C
    };
public:
    T Func()
    {
        return B;
    }
};
 
int main()
{
    cls c;
    c.Func(); // 这样可以
    cls::T t=c.Func(); // 这样可以
    return 0;
}

------解决方案--------------------
引用:
C/C++ code?1234567891011121314151617181920212223class cls{//public:    enum T    {        A = 0,        B,        C    };public:    T Func()    {        return B;    }}; int main(){    cl……


在VS中这样是可以的,LZ是用得什么编译器