在类外部使用在类内部声明的类型定义枚举

Using a typedef enum outside of a class that was declared inside the class

本文关键字:类型 枚举 定义 内部 外部 声明      更新时间:2023-10-16

在c++中,我有这样的东西:

namespace myNS
{
    class A
    {
        public:
        typedef enum A_ENUMS { NONE, ALL } A_ENUMS;
    };
}

我想访问这个typedef,可能是这样的:

namespace myNS
{
    struct ASettings
    {
        myNS::A::A_ENUMS myASetting;
    }
}

但是我得到一个错误,A没有声明类型。如有任何帮助,不胜感激。

UPDATE:谢谢你的建议和帮助。经过建议,我更新了代码。我忽略了一个事实,即这里也涉及到一个名称空间。

您的typedef/enum声明是私有的。把它设为公共,你就可以从类外访问它了。

class A {
public:
    typedef enum A_ENUMS { NONE, ALL } A_ENUMS;
};

在c++类中,默认的访问是private,所以你的类型不能从结构体中访问。使用

class A
{
public:
 typedef enum A_ENUMS { NONE, ALL } A_ENUMS;
};

然而,c++不是C,你不需要像C中通常使用的那样使用类型定义。

class A
{
public:
 enum A_ENUMS { NONE, ALL };
};

如果没有不必要的元素,它的效果是一样的

你犯了两个错误:

  1. typdef != typedef(错误输入)
  2. 你忘记了类的可见性

修改后的代码:

class A
{
public:
    typedef enum { NONE, ALL } A_ENUMS;
};
struct ASettings
{
  A::A_ENUMS myASetting;
};
int
main()
{
}

如果你有正常的c++ 11支持,那么你可以用类作用域重写枚举,像这样:

typedef enum class A
{
  NONE, ALL
} A;

欢呼。

参见上面的"更新"部分。需要包含命名空间