2014-10-30 46 views
-2

我無法在此網站上找到相同的問題,因此詢問。我想知道如何從類中聲明的C文件訪問枚舉類型。考慮下面的例子:如何訪問C文件中的C++枚舉

test1.h

class abc 
{ 
    public: 
    enum mode 
    { 
     ENTER_MODE = 0, 
     EXIT_MODE = 1 
    }; 
} 

test2.h

abc::mode test_mode(); 

test2.c中

abc::mode test_mode() 
{ 
    if (some_condition) 
    { 
    return abc::ENTER_MODE; 
    } 
    else 
    { 
    return abc::EXIT_MODE; 
    } 
} 

這並不編譯。任何建議?

+0

什麼編譯錯誤,你看見了什麼?你在test2.h裏面包含test1.h嗎? – mskfisher 2014-10-30 13:05:47

+0

'test2.c'應該是'test2.cpp' - 你必須將它編譯爲C++,而不是C。 – 2014-10-30 13:06:25

+0

是的,我包括...編譯器給出的警告與test1.cpp中包含的其他文件有關..這是奇怪的 – Mahesh 2014-10-30 13:07:21

回答

0

儘量避免使用C類。相反,只需使用結構(C++中的結構支持許多類的功能)。在這個示例代碼中(不管我的假設是否錯誤),不需要將枚舉的範圍限制在一個類中。

理想情況下,您應該將它們保存爲.cpp文件並編譯爲C++。編譯錯誤說的是什麼?

-1

結束的類定義以分號,並聲明如下:

enum abc::mode test_mode(); 

嘗試這一個(這個編譯)OK:

class abc 
{ 
    public: 
    enum mode 
    { 
     ENTER_MODE = 0, 
     EXIT_MODE = 1 
    }; 
}; 

enum abc::mode test_mode() 
{ 
    bool some_condition=false; // or something 
    if (some_condition) 
    { 
    return abc::ENTER_MODE; 
    } 
    return abc::EXIT_MODE; 
} 
+0

-1,不是答案。 C沒有'::'運算符。 – 2014-10-30 13:37:04

+0

@JensGustedt但是使用了類,你的意思是C? – 2014-10-30 16:26:16

+0

同意@PaulR文件名應該是.cpp,而不是.c – 2014-10-30 16:37:51