2013-04-01 137 views
0

我想這樣做:枚舉聲明和定義

static const enum GSENSITIVITY {G1=0,G15=1,G2,G3,G4,G8,G16}gSense; 

如果我在輸入這個.h文件中的一切都近乎完美,但我不能讓這將返回GSENSITIVITY type.It的方法不承認它。另外我不能在.cpp上做任何gSense的定義。至少我使用的語法不起作用。哪個是正確的語法?

而且我不能只需鍵入:

static const enum GSENSITIVITY {G1=0,G15=1,G2,G3,G4,G8,G16}; 

我得到這個錯誤:

error: a storage class can only be specified for objects and functions

+2

也許你應該嘗試解釋你爲什麼要將const關鍵字添加到一個枚舉中...然後閱讀關於枚舉的... – Macmade

+0

可能的[C++:static static枚舉是什麼意思](http:/ /stackoverflow.com/questions/4971436/c-what-does-static-enum-mean) –

+0

是的這不是我犯的唯一的錯誤,我也試圖使一個函數GSENSITIVITY類型名稱「對象」,但在.cpp文件我只輸入GSENSITIVITY。它想要鍵入_name_of_class _ :: GSENSITIVITY _name_if_function()......... – kyrpav

回答

1

在第一個例子,你不能定義任何的源文件gSense,因爲它是在已定義頭文件。

此外,第二個例子是行不通的,因爲你不定義一個變量和staticconst定義enum時沒有任何意義。

+0

name_of_class :: GSENSITIVITY _name_if_function(){};這不正確嗎? – kyrpav

+0

@kyrpav現在,您正在使用C++作用域語法和'::'運算符。然後只使用標識符是正確的,'some_class :: some_enum some_function();'的確是正確的。 –

+0

@kyrpav:不在C中。 –

0

代碼示例混合了兩種不同的概念。有時候沒關係,但可能會讓人困惑。

要定義一個枚舉類型:

enum GSENSITIVITY { G1, G15, G2, G3, G4, G8, G16 }; 

G1的值是0,並且每個隨後的枚舉得到的下一個值。也就是說,問題中的顯式值是不需要的。

這就是你需要從一個函數返回一個枚舉類型的值:

GSENSITIVITY f() { return G1; } 

如果你想創建一個枚舉類型的對象,它就像創建任何其他類型的對象: cv修飾符,類型名,對象名:

const GSENSITIVITY gSense; // value is 0, i.e., G1 

或添加可選的初始化:

const GSENSITIVITY gSense = G3; 

你不需要像static那樣標記一個常量;這暗示了const

0

沒有更多的上下文,不可能告訴你想要做什麼。

static const enum GSENSITIVITY {G1=0,G15=1,G2,G3,G4,G8,G16}gSense; 

如果這應該是一個類成員,那麼這很好 - 它定義的類型GSENSITIVITY,並且聲明變量gSense。您還需要定義和初始化變量,在源文件中,這樣,只有一個定義:

const my_class::GSENSITIVITY gSense = something; 

如果它不是一個類成員,那麼這將聲明的類型,而且也將定義該變量以及聲明它。由於它是const,所以定義也必須用一個值初始化它。

在任何一種情況下,都不應該聲明函數返回GSENSITIVITY;如果你有問題,那麼你需要發佈代碼和錯誤信息。

static const enum GSENSITIVITY {G1=0,G15=1,G2,G3,G4,G8,G16}; 

定義一個類型,並錯誤消息告訴您,staticconst不能爲類型定義來指定。