2012-03-19 11 views
18

Supongo que esto es embarazoso si te digo que no puedo compilar esto. ¿podría por favor me ayude:error de compilación unique_ptr

#include<memory> 
using namespace std; 

int main() 
{ 
    std::unique_ptr<int> p1(new int(5)); 
    return 0; 
} 
$ gcc main.cpp 
main.cpp: In function ‘int main()’: 
main.cpp:6:2: error: ‘unique_ptr’ was not declared in this scope 
main.cpp:6:13: error: expected primary-expression before ‘int’ 
main.cpp:6:13: error: expected ‘;’ before ‘int’ 

$ gcc --version 
gcc (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1 
+2

'gcc' casi nunca se utiliza sin pasar algunas opciones. Pruebe al menos 'g ++ -std = C++ 0x -pedantic main.cpp'. –

+5

¿Por qué usa std :: si tiene el uso de namespace std; de todos modos? – Azrael3000

+0

gracias. funcionó. 1- ¿Por qué no publicas una respuesta para que pueda marcarla como verdadera? 2-mientras estás en él, ¿podrías darme una breve explicación de por qué nunca se usa gcc (y se usa g ++ en su lugar) o quizás un enlace a una referencia? gracias – rahman

Respuesta

31

Ésta es sólo una suposición.

más probable es que se ha compilado su programa como este (o de manera similar):

g++ main.cpp 

Si es así, entonces el problema es que g ++ utiliza C++ 03 por defecto. Para utilizar C++ 11 (características y std::unique_ptr), es necesario utilizar una versión más nueva de C++:

g++ -std=c++11 

o

g++ -std=c++14 

y recomendaría usar también -Wall -Wextra -pedantic.

+0

Estoy enfrentando el mismo problema, pero el indicador '-std = C++ 11' está habilitado y se incluyen todos los encabezados necesarios. No se puede obtener lo que está mal: https://gist.github.com/canadien91/2ba3f9576823159c2d52 – Montreal

+0

para referencia futura: @Montreal #include Stuck

+0

@Stuck, hmm, en mi esencia está incluido. Pero no recuerdo ahora cuando agregué esto. – Montreal

3

Si está utilizando Código :: Blocks, vaya a Configuración> Generador> Configuración global del compilador> Ajustes del compilador y buscar la Tienes g ++ sigue el C++ 11 ISO C++ estándar del lenguaje [-std=c++11] ¡y compruébalo!

(Código :: Blocks añadirá el -std=c++11 para usted al compilar)