【问题标题】:Accessing an enum from within a class, both of which are in the same namespace从一个类中访问一个枚举,它们都在同一个命名空间中
【发布时间】:2012-03-28 14:55:40
【问题描述】:

我有类似以下设置的东西:

namespace MyNamespace
{
    enum MyEnum{
        Type1,
        Type2
    };

    class MyClass
    {
        private:
            void MyFunction( MyEnum::Type1 );
    };
}

我会假设因为MyEnumMyClass 都在MyNAmespace 内,所以在类中使用枚举类型不会有问题,但是当我尝试编译它时,会出现以下错误:

'MyEnum::Type1' is not a type

我该如何解决这个问题,以便我可以在同一个命名空间中使用我的枚举和类?

【问题讨论】:

  • MyEnum::Type1 是一个枚举值,而不是你的编译器所说的类型。

标签: c++ namespaces scope


【解决方案1】:

MyEnum 是您引用它的方式。

namespace MyNamespace
{
    enum MyEnum{
        Type1,
        Type2
    };

    class MyClass
    {
        private:
            void MyFunction( MyEnum );
    };
}

定义可能如下所示:

namespace MyNamespace
{
  void MyClass::MyFunction( MyEnum val) {
    if (val == Type1)
      std::cout << "Type1" << std::endl;
  }
}

【讨论】:

    【解决方案2】:

    MyEnum::Type1 不是一种类型。这是一个值。试试这个:

    void MyFunction( MyEnum );
    

    【讨论】:

      【解决方案3】:

      Typedef 你的枚举

      typedef enum _MyEnum{ Type1, Typ2}MyEnum;
      

      【讨论】:

      • 这在 C++ 中完全没有必要并且 _MyEnum 是一个保留名称。
      • 是的,我完全把事情搞砸了。我混合在类中添加枚举以通过类访问,例如:MyClass::Type1。对不起
      猜你喜欢
      • 2023-04-01
      • 1970-01-01
      • 2016-02-06
      • 1970-01-01
      • 2012-05-27
      • 1970-01-01
      • 1970-01-01
      • 2022-11-23
      • 2011-09-26
      相关资源
      最近更新 更多