2012-02-20 12 views
21

Parece que no puedo obtener g ++ para compilar el código de C++ 11 que usa un constructor de movimiento. Sigo recibiendo este error:¿Cómo consigo g ++ para compilar el código de C++ 11 con un constructor de movimiento?

[email protected]:~/Projects/arraylib$ g++ ./t2.cpp 
./t2.cpp:10:27: error: expected ‘,’ or ‘...’ before ‘&&’ token 
./t2.cpp:10:38: error: invalid constructor; you probably meant ‘Blarg (const Blarg&)’ 

El programa que estoy escribiendo es muy diferente de esto, pero recortado hacia abajo a la parte que parece que definitivamente debería funcionar, y aún así desencadena el error:

#include <iostream> 

using namespace std; 

class Blarg { 
    public: 
     Blarg() {}; 
     Blarg (const Blarg& original) {}; /* Copy constructor */ 
     Blarg (Blarg&& original) {}; /* Move constructor */ 
}; 

int main(int argc, char *argv[]) 
{ 
    Blarg b; 
    return 0; 
} 

¿Alguien puede decirme qué estoy haciendo mal? Por el contrario, ¿cómo solucionarlo?

Ésta es mi versión de gcc:

gcc (Ubuntu/Linaro 4.6.2-14ubuntu2) 4.6.2 
+2

Tenga en cuenta que pasar una referencia constante para un constructor de movimiento es bastante inútil; de manera realista, debería ser 'Blarg (Blarg && original)'. – ildjarn

+0

Sí, gracias. Lo he arreglado en mi código actual. Lo arreglaré arriba, también. – Collin

Respuesta

39

Say g++ -std=c++0x ./t2.cpp.

Mientras estás en ello, que también podría hacerlo bien y ayudar a todas las advertencias:

g++ -W -Wall -Wextra -pedantic -std=c++0x -o t2 t2.cpp 

Realmente, realmente no se debe compilar con menos, especialmente si se va para hacer preguntas sobre su código en SO :-) Varios indicadores de optimización deberían considerarse opcionalmente para la versión de lanzamiento, como -s -O2 -flto -march=native.

+2

"Hágalo bien", mientras que la página de manual para -std = C++ 0x indica "Esta opción habilita características experimentales que pueden eliminarse en el futuro". De seguro están a la defensiva en esas páginas de manual :-) –

+0

Muchas gracias por salvarme de filtrar a través del manual de más de 600 páginas ... Voy a verificar que esto funcione de la forma prevista y marcar esto como la respuesta. – Collin

+2

@CaptainGiraffe: para estar seguro, la opción dialecto no está incluida en "hacerlo bien". Dicho esto, 'C++ 0x' será soportado por un tiempo, pero de 4.7 en adelante puedes decir' C++ 11' también. –

14

Es probable que haya olvidado agregar -std=c++0x a su línea de comandos.

+0

Pobre cosa, el mismo tiempo de respuesta con la misma respuesta relevante pero no tantos votos al alza. ¡Creo que la tuya es una respuesta relevante más sucinta! –

Cuestiones relacionadas