2012-03-28 65 views
1

我有類似下面的設置:訪問類中的枚舉,這兩者都是在同一個命名空間

namespace MyNamespace 
{ 
    enum MyEnum{ 
     Type1, 
     Type2 
    }; 

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

我都會以爲,因爲兩者MyEnumMyClass不到MyNAmespace,使用在類中枚舉類型不會是一個問題,但是當我嘗試編譯它,我得到以下錯誤:

'MyEnum::Type1' is not a type 

我怎樣才能解決這個問題,所以我可以用我的枚舉和類在同一個名字?

+3

'MyEnum :: Type1'是一個枚舉值,不是一個類型的,因爲你的編譯器在說什麼。 – Mat 2012-03-28 14:57:33

回答

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; 
    } 
} 
-1

您的typedef枚舉

typedef enum _MyEnum{ Type1, Typ2}MyEnum; 
+0

這在C++ *中是完全不需要的,並且*'_MyEnum'是一個保留名稱。 – 2012-03-28 15:06:40

+0

是的,我完全混淆了東西。我混淆了在類中通過添加枚舉來訪問類,如:MyClass :: Type1。抱歉 – grifos 2012-03-28 16:23:12

0

MyEnum::Type1一個類型。這是一個價值。試試這個:

void MyFunction(MyEnum); 
相關問題