C++ for each цикл. Ошибка компиляции.

217
18 ноября 2018, 18:30

Не могу понять в чем проблема. Просто не компилируется данный код:

int main(int argc, char * argv[])
{
int arr[] = { 1,2,3,4,5,6,7 };
for each (int var in arr)
{
}
system("pause");
}

Ошибка компиляции: expected a {.

Чего ему здесь не хватает?

Answer 1

Видимо это нестандартный синтаксис for each, in, реализованный в свое время в VC++ и VC++/CLI. Однако в стандарт С++ попал альтернативный синтаксис, который и следует использовать:

for(auto const & int: arr)
{
}
Answer 2

в с++ for each это не конструкция языка а функция из стандартной библиотеки STL, которую следует использовать следующим образом в вашем примере:

#include <iostream>
#include <algorithm>
int main(int argc, char * argv[])
{
    int arr[] = { 1,2,3,4,5,6,7 };
    std::for_each(arr, arr + sizeof(arr)/sizeof(arr[0]), [](int el) 
    { 
        std::cout << el << ' ';
    });
    system("pause");
    return 0;
}
Answer 3

Возможно, ваш компилятор не поддерживает приведённый вариант. И правильно делает, в общем, потому что это полный нестандарт.

Стандартный вариант записи (начиная с C++11) такой:

int main(int argc, char * argv[])
{
int arr[] = { 1,2,3,4,5,6,7 };
for (int var : arr)
  {
  }
}
READ ALSO
Метод erase из vector&lt;string&gt; не принимает параметр string

Метод erase из vector<string> не принимает параметр string

В этом отрывке кода не компилируется erase

214
Взаимодействие с проектором через Ethernet

Взаимодействие с проектором через Ethernet

Имеется проектор Panasonic PT-D4000U с Ethernet подключениемНеобходимо написать приложение на C++ (Qt), которое по локальной сети заходит на страничку проектора,...

238
Закрытие QComboBox для редактирования

Закрытие QComboBox для редактирования

Есть QComboBox, который по дефолту должент быть в состоянии editable, но по нажатию кнопки он должен быть закрыт для редактирования, при этом сохранив...

201
Наследование шаблонных классов [дубликат]

Наследование шаблонных классов [дубликат]

На данный вопрос уже ответили:

199