2016-01-21 102 views
1

你好,我一個項目中遇到了這個問題裏面,我有這樣的事情:(C++)不能引用枚舉類命名空間

types.h中

namespace Machine 
{ 
    enum class size{ 
     TINY, 
     SMALL, 
     MEDIUM 
    } 
    //other stuff..... 

,並在另一個文件:

test.h:

#include "types.h" 
class sample{ 
    public: 
     void some_function(); 
     Machine::size s; //this declaration is correct 
} 

TEST.CPP:

#include "test.h" 
void some_function(){ 
    s = Machine::size::TINY;//line aaaa; this line is error 
} 

在行AAAA我一直得到錯誤信息:

error: 'Machine::size' is not a class or namespace

任何人有任何想法,爲什麼?或者將enum類放在命名空間內不好嗎? 謝謝!

Edit: I fixed the machine spell problem in the first file, sorry about that

機::大小S只是爲了保持這個屬性(一臺機器的大小)的地方,所以我真的不認爲這是一些特別的東西。

+0

在您的第一臺文件機器中是下劃線。是否打算 – Eric

+1

請不要使用接受的答案解決您的問題。任何後來閱讀這篇文章的人都會感到困惑。我回到了以前的修訂版,以便問題和答案有意義。 – paddy

回答

0

TEST.CPP替換定義開始

void some_function() 

通過

void sample::some_function() 

否則你要定義一個獨立的功能與類sample毫無關係(在其他單詞,你沒有定義一個成員函數)。所以在你的情況下,s不被看作是類sample的成員變量,因此是錯誤。

+0

謝謝!但是如果這部分也是正確的,這個錯誤不應該發生嗎? – Wenyu

+0

@Wenyu不,它應該工作,它的工作原理(在我身邊測試)。做一個最簡單的例子,並確保正確編譯它,包括'-std = C++ 11'編譯器標誌,如果你使用C++ 11和gcc/clang。 – vsoftco

+0

@Wenyu如果它現在有效,請恢復編輯,因爲現在問題中的代碼看起來完全正確,答案似乎解決了一個不存在的問題。 – vsoftco