Acabo de compilar GCC 4.6.0, y quería probar las nuevas características, comenzando con el bucle for basado en rango.
El primer bucle que quería cambiar era iterar en un std :: vector de punteros. Cambié el código para usar la nueva sintaxis, pero no compiló.C++ 11 basado en rango para un vector de punteros
He intentado sustituir otro ciclo forzado, que estaba en un estándar de estructuras, y se compiló y ejecutó perfectamente.
Aquí hay un código de prueba corta para mostrarle mi problema:
#include <vector>
#include <iostream>
int main()
{
std::vector<int> values;
values.push_back(2);
values.push_back(5);
values.push_back(8);
values.push_back(13);
values.push_back(17);
for (int &n : values)
{
std::cout << n << "\n";
}
std::vector< int* > pointers;
pointers.push_back(new int(2));
pointers.push_back(new int(5));
pointers.push_back(new int(8));
pointers.push_back(new int(13));
pointers.push_back(new int(17));
for ((int*) &p : values)
{
std::cout << (*p) << "\n";
}
for(unsigned int i = 0; i < pointers.size(); ++i)
{
delete pointers[i];
}
return 0;
}
Cuando intento compilar (sí, doy -std = C++ 0x como un parámetro para g ++), muere con este error:
main.cpp|27|error: found ‘:’ in nested-name-specifier, expected ‘::’
Si comento las líneas 27-30, está bien.
¿Qué estoy haciendo mal? ¿La referencia de puntero que declara la sintaxis no es correcta?
¿O existe una limitación de los tipos contenidos en los que se pueden usar bucles basados en rangos?
¡Gracias por cualquier ayuda!
En caso de Proba bly se movió a SO –
@Doug: De acuerdo ... y también sería útil si la pregunta incluye definitivamente el código fuente en lugar de tener una pequeña URL. – jprete