2012-03-19 20 views
5

Estoy jugando con unique_ptr. En mi last post las personas me ayudaron a compilar un programa que usaba este puntero especificando -std = C++ 0x durante la compilación. ¿Ahora me preguntaba si hay alguna manera de ordenar eclipse para considerar C++ 11 mientras se completa automáticamente?
unique_ptr no aparece en la lista de std :: namespace, ni puedo encontrar los métodos (restablecer, mover ...) asociados con un único_ptr.unique_ptr autocompletar en eclipse

Gracias Vahid

+0

Conozco a alguien conoce todos los 30 pasos para hacerlo bien, pero me gustaría cambiar a kdevelop y permitir función de autocompletar;) –

+2

¿El consejo en el último comentario sobre [este error] (https://bugs.eclipse.org/bugs/show_bug.cgi?id=314014) ayuda? No uso Eclipse, así que no puedo probarlo. –

+0

@Als No, no funcionó, pero tanx. FYI, abrí las propiedades del proyecto-> C/C++ Build-> Discovery Options-> GCC C++ Compiler: en los argumentos de Invokation del compilador agregué -std = C++ 0x pero nada funcionó. – rahman

Respuesta

1

Creo que se debe añadir a sus __GXX_EXPERIMENTAL_CXX0X__ definición "Caminos y símbolos" en Eclipse. Vea también esta pregunta GNU C++ how to check when -std=c++0x is in effect? y la misma pregunta Eclipse indexer can't resolve shared_ptr para shared_ptr.

+0

no pudo hacerlo. ¿Es posible que alguien más experimentado intente esto? – rahman

+0

@rahman, mira la [misma pregunta] (http://stackoverflow.com/q/8312854/72178) para 'shared_ptr', OP informó que funcionó. – ks1322

+0

Estoy en Eclipse Juno y, aunque configurar ese símbolo funciona para el reconocimiento de std :: unique_ptr, el indexador marca cualquier uso de std :: move con un único_ptr con un error de "argumento no válido". – Hans

3

El encabezado "memoria" (que probablemente se encuentre en /usr/include/c++/4.9/memory) solo incluye "unique_ptr.h" y "shared_ptr.h" (probablemente se encuentre en /usr/include/c++/4.9/ bits/unique_ptr.h y /usr/include/c++/4.9/bits/shared_ptr.h) si la macro "__cplusplus" es igual o mayor que "201103L". Compruebe memory.h para ver la condición del preprocesador "#if" allí, en la línea 69 (o busque la cadena "# if __cplusplus> = 201103L").

Como otros mencionaron, compilar con "-std = C++ 0x" o más tarde estándares de C++ (-std = C++ 11 o -std = C++ 14) resuelve los errores de compilación, pero no la indexación del eclipse y el problema de autocompletar.

Para resolver el problema de indexación de eclipse, agregué el macro de preprocesador "__cplusplus" a las propiedades de compilación del proyecto, con el valor "201103L", y luego actualicé el índice;

Para agregar la macro preprocesador:

"Haga clic derecho en el proyecto en Explorador de proyectos" >> propiedades >> C/C++ general >> >> preprocesador Incluye entradas >> GNU C++ >> CDT usuario Ajustes Entradas> > Agregar ... >> Macro de preprocesador;

A continuación, introduzca una macro con el nombre "__cplusplus" y el valor "201103L";

Después, para actualizar el índice, hacer:

"proyecto de click derecho en Explorador de proyectos" >> Índice >> Reconstrucción;

Obs .: yo estaba usando gcc 4.9.2 y Eclipse de Luna (4.4.2), en ubuntu 15.04 64bits

+0

Esta respuesta me ayudó mucho, gracias :) –