在类中声明的类之外使用typedef枚举

时间:2014-08-09 23:21:46

标签: c++ class typedef enumeration

在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没有声明类型。任何帮助表示赞赏。

更新:感谢您的建议和帮助。建议后,我更新了代码。我错过了这个事实也涉及到名称空间。它现在有效。

4 个答案:

答案 0 :(得分:2)

您的typedef / enum声明是私有的。将其公开,您将能够从课堂外访问它。

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

答案 1 :(得分:1)

在C ++类中,默认访问是私有的,因此无法从结构中访问您的类型。使用

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

但是,C ++不是C,你不需要像C中通常使用的那样使用typedef。试试:

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

如果没有不必要的元素,它将起作用。

答案 2 :(得分:1)

你犯了两个错误:

  1. typdef!= typedef(mistyping)
  2. 你忘记了课程的可见性。
  3. 更正后的代码:

    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;
    

    干杯。

答案 3 :(得分:0)

请参阅上面的更新部分。需要包含名称空间。

相关问题