2013-05-12 101 views
0

這是爲什麼不工作:靜態的typedef的std ::列表陣列

 enum Color { 
      enRed, 
      enGreen, 
      enYellow 
     }; 

     typedef static std::list<Apple> Basket[3]; 

     std::for_each(Basket[enRed].begin(), 
         Basket[enRed].end(), 
         std::mem_fn(&Apple::Name()) 
        ); 

我在這裏做飯了麻煩?

編輯:行動,是我輸錯,應該enRed,而不是顏色

+3

'typedef'定義一種類型的別名,而不是一個變量。 – 2013-05-12 02:29:17

+3

這段代碼有太多錯誤。 – 2013-05-12 02:42:37

+1

不要'enum'使用像'enRed'借款'en'名。從關鍵字借用信件是一個紅旗,即使MFC做到了。描述性名稱更好:'color_red'或C++ 11,'Color :: red'。 – Potatoswatter 2013-05-12 02:57:09

回答

3

static只能應用於一個實例,typedef被用來聲明type因此該語句不能工作的指標:

typedef static std::list<Apple> Basket[3]; 

雖然您可以創建一個typedef,然後再聲明一個static實例。因爲它是一個type不能使用Color作爲索引,儘管下面將工作:

Basket[enRed] 
+0

@Potatoswatter它索引到的'的std :: list'陣列,或者至少我的修改後的版本是,但我敢肯定,這是意圖 – 2013-05-12 02:58:25

+0

啊,公平的這份厚禮:) – Potatoswatter 2013-05-12 02:59:04

+0

好吧,我現在明白了我要去的地方錯誤。我不知道這個靜態只適用於一個實例。謝謝。 – 2013-05-12 03:11:07

1

在你的代碼Color是給枚舉

類型名稱它不能用於索引。

+0

@icktoofay'顏色'不是一個價值。 – Potatoswatter 2013-05-12 02:55:22

+0

@Patatoswatter:你說得對。我錯過了。 – icktoofay 2013-05-12 02:56:04

+0

是我輸錯,應該enRed,而不是顏色索引。謝謝你指出。 – 2013-05-12 03:12:22