2013-05-12 5 views
0

Почему это не работает:Typedef статический станд :: Список массив

 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()) 
        ); 

Am я готовя проблема здесь?

Edit: Ops, да я опечатался, она должна быть enRed и не цвет для индекса

+3

'typedef' определяет псевдоним типа, а не переменную. –

+3

В этом фрагменте кода так много ошибок. –

+1

Не используйте такие имена, как 'enRed', заимствование' en' из 'enum'. Заимствование писем из ключевых слов - это красный флаг, даже если MFC это делает. Описательные имена лучше: 'color_red' или в C++ 11,' Color :: red'. – Potatoswatter

ответ

3

static может быть применен только к экземпляру typedef используется для объявления type поэтому это утверждение не может работать:

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

Хотя вы можете создать typedef и чем позже объявить static экземпляр. Вы не можете использовать Color в качестве индекса, так как это type, хотя следующее будет работать:

Basket[enRed] 
+0

@Potatoswatter Он индексируется в массив 'std :: list', или, по крайней мере, моя модифицированная версия, но я уверен, что это было намерение –

+0

Ah, fair nuff :) – Potatoswatter

+0

Хорошо, теперь я понимаю, куда я иду неправильно. Я не знал, что статичность применяется только к экземпляру. Спасибо. –

1

В коде Color является

имя типа дано перечисление

Он не может использоваться для индексирования.

+0

@icktoofay «Цвет» не является значением. – Potatoswatter

+0

@Potatoswatter: Вы правы. Я пропустил это. – icktoofay

+0

Да, я ошибся, он должен быть enRed, а не цвет для индекса. Спасибо, что указали это. –

Смежные вопросы