2011-08-15 17 views
6

Estaba experimentando con algunas de las nuevas características de C++ 0x con G ++. Lambdas, auto, y las otras características nuevas funcionaron como un amuleto, pero el bucle for-based basado en rango no compiló. Este es el programa que estaba probando:G ++ no compila C++ 0x basado en el rango para el ciclo

#include <iostream> 
#include <vector> 

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

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

I compilado con:

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

También probé gnu++0x, pero la salida fue el mismo.

Este fue el resultado:

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 

Gracias de antemano por su ayuda.

EDITAR: Estoy usando GCC versión 4.5.2, que ahora veo es demasiado viejo.

+2

¿Qué versión de gcc está usando? – pmr

Respuesta

14

Necesita GCC 4.6 y superior para obtener bucles basados ​​en rangos.

GCC's C++0x status

$ 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) 
+0

¡Gracias! Veo que esta versión no está en mis repositorios de Ubuntu, así que supongo que podría necesitar instalarla manualmente. – rovaughn

Cuestiones relacionadas