Ошибка компиляции с циклом «для каждого» в C ++ VS2010

Я работал над небольшим проектом C ++ дома, который я привел в школу, чтобы показать своему учителю. У меня дома Visual Studio 2012, а на школьных компьютерах - Visual Studio 2010. В моем коде из дома у меня был цикл for, например, который скомпилировал:

for(char c : myStr){...}

Однако, когда я попробовал его на компьютерах моей школы, он не скомпилировался, и мне пришлось вместо этого сделать следующее:

for each(char c in myStr){...}

Почему это так?

 crashmstr11 дек. 2013 г., 23:37
for each это синтаксис, введенный с C ++ / CLI, но доступный без него (тем не менее, специфическое расширение Microsoft).
 user297608911 дек. 2013 г., 23:37
@nhgrif - я так думал, но не смог проверить (у нас очень короткие уроки)
 nhgrif11 дек. 2013 г., 23:36
Используете ли вы ту же версиюC++ в каждом?
 polkadotcadaver11 дек. 2013 г., 23:38
Смотрите здесь также:stackoverflow.com/questions/6898859/...
 Retired Ninja11 дек. 2013 г., 23:37
Visual Studio 2010 не поддерживает так много текущего стандарта C ++, как 2012.msdn.microsoft.com/en-us/library/hh567368.aspx

Ответы на вопрос(6)

Решение Вопроса

for(char c : myStr){...} синтаксис новый сC++11, так что-нибудь, используя более старую версиюC++ не будет компилироваться с этим синтаксисом.

Предыдущий до C ++ 11,for_each определяется вalgorithm заголовок.

 user297608911 дек. 2013 г., 23:41
Очень подробный ответ, спасибо

не поддерживает диапазон для утверждения. С другой стороны, MS VC ++ 2010 имеет расширение для каждого языка в языке MS, которое было введено в управляемом C ++ для поддержки оператора foreach в C #.

myStr) является одной из новых функций C ++ 11, и VC ++ в Visual Studio его не поддерживает.

Смотрите здесь список функций C ++, которые реализуют компиляторы VS2010 и VS2012 C ++:http://blogs.msdn.com/b/vcblog/archive/2011/09/12/10209291.aspx

Вторая форма - это синтаксис, который просочился в компилятор из C ++ / CLI (совершенно другой язык, предназначенный для среды выполнения .NET). Я исправил ошибку на некоторое время назад. Если вы компилируете с/Za переключатель, это отключит это расширение языка. Вам нужно будет использовать C ++ 03 для синтаксиса цикла, используя итератор илиstd::for_each.

добавлено в Visual Studio 2012, Чтобы узнать больше о функциях C ++ 11 в Visual Studio 2008 (VC9) и Visual Studio 2010 (VC10), установите флажокзапись в блоге из команды Visual C ++. Есть похожие таблицы, чтобы вы знали оVisual Studio 2012 и несколько разных выпусковVisual Studio 2013.

Итог: вашfor Цикл, который вы сделали дома, это замечательно, если у вас есть Visual Studi, o 2012. Если вы этого не сделаете, используйте обычныйfor или жеstd::for_each, неfor each ты там используешь.

компиляторы в вашей школе, вероятно, не соответствуют новому стандарту.

Ваш ответ на вопрос