G ++ не компилирует C ++ 0x основанный на диапазоне цикл for - PullRequest
6 голосов
/ 16 августа 2011

Я экспериментировал с некоторыми новыми функциями C ++ 0x с G ++. Lambdas, auto и другие новые функции работали как чудо, но цикл for на основе диапазона не скомпилировался. Это программа, которую я тестировал:

#include <iostream>
#include <vector>

int main ()
{
    std::vector<int> data = { 1, 2, 3, 4 };

    for ( int datum : data )
    {
        std::cout << datum << std::endl;
    }
}

Я скомпилировал это с:

g++ test.cpp -std=c++0x

Я тоже пробовал gnu++0x, но вывод был тот же.

Это был вывод:

test.cpp: In function ‘int main()’:
test.cpp:8:21: error: expected initializer before ‘:’ token
test.cpp:12:1: error: expected primary-expression before ‘}’ token
test.cpp:12:1: error: expected ‘;’ before ‘}’ token
test.cpp:12:1: error: expected primary-expression before ‘}’ token
test.cpp:12:1: error: expected ‘)’ before ‘}’ token
test.cpp:12:1: error: expected primary-expression before ‘}’ token
test.cpp:12:1: error: expected ‘;’ before ‘}’ token

Заранее спасибо за помощь.

РЕДАКТИРОВАТЬ: я использую GCC версии 4.5.2, который я теперь вижу, слишком стар.

1 Ответ

14 голосов
/ 16 августа 2011

Вам необходим GCC 4.6 и выше, чтобы получить петли на основе диапазона.

C ++ 0x статус GCC

$ cat for.cpp
#include <iostream>
int main()
{
  for (char c: "Hello, world!")
    std::cout << c;
  std::cout << std::endl;
  return 0;
}
$ g++ -std=c++0x -o for for.cpp
$ ./for
Hello, world!
$ g++ --version
g++ (GCC) 4.6.1 20110325 (prerelease)
...