G++ не компилира C++0x базиран на диапазон for цикъл

Експериментирах с някои от новите функции на 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, която сега виждам, че е твърде стара.


person rovaughn    schedule 15.08.2011    source източник
comment
Коя версия на gcc използвате?   -  person pmr    schedule 16.08.2011


Отговори (1)


Нуждаете се от GCC 4.6 и по-нова версия, за да получите базирани на диапазон for цикли.

Състояние на 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)
person Peter Alexander    schedule 15.08.2011
comment
Благодаря ти! Виждам, че тази версия не е в моите хранилища на Ubuntu, така че предполагам, че може да се наложи да я инсталирам ръчно. - person rovaughn; 16.08.2011