2010-07-07 53 views
0

訪問的枚舉在頭我有一個設置這樣命名空間中的

namespace NS { 
    typedef enum { GOOD, BAD, UGLY }enum_thing; 
    class Thing { 
     void thing(enum_thing elem); 
    } 
} 

,當然這與頭一起去另一個CPP文件。然後我有一個包含main()的線程cpp文件。在這個cpp文件中,我使用該枚舉傳遞給方法thing()。

​​

當然我從G ++得到了其他錯誤,說BAD沒有聲明。任何幫助我如何克服這個錯誤?

+1

它應該是'Thing t;'not'Thing t()' – smerlin 2010-07-07 22:36:32

+0

一個'public:'在方法丟失之前缺少,在類聲明結尾處丟失';' 。 – jdehaan 2010-07-07 22:41:00

+0

如果您完全符合枚舉:「NS :: BAD」,該怎麼辦?較老的編譯器不喜歡這個。在這種情況下,不需要C++中的typedefing。這裏匿名枚舉正在被typedef處理。 – jdehaan 2010-07-07 22:44:46

回答

2

你可以避免使用typedef嗎?只要這樣做:

enum Foobar {good, bad, hello}; 
+0

固定。非常感謝。 – SummerCodin 2010-07-07 22:39:00

5

在糾正了示例代碼中的許多小的語法錯誤之後,它對我來說編譯得很好。檢查你的拼寫正確。你可以訪問枚舉爲NS :: BAD?也許你沒有包含正確的標題?確保頂部有 #include "FileWithEnum.h"

namespace NS { 
    typedef enum { GOOD, BAD, UGLY }enum_thing; 
    class Thing { 
     public: 
      void thing(enum_thing elem){} 
    }; 
} 


using namespace NS; 
int main() { 
    Thing t; 
    t.thing(BAD); 
    return 0; 
} 

測試它自己: ​​

0

它應該工作。它對我來說(Mystagogue的變體也應該有效)。我知道你有其他錯誤信息?

你可能只需要修正頭部在語法上是正確的,就像在類Thing等末尾放一個分號一樣。當頭部正常時,關於BAD而不是名稱空間的消息也應該消失。