2012-06-22 27 views
6

Después de seguir los pasos en this post me las arreglé para hacer que Eclipse (Indigo) reconozca unique_ptr (y otras cosas nuevas de C++ 11). El problema es que operator-> para unique_ptr parece no ser compatible con Eclipse. Aquí tienes un ejemplo:El operador de desreferencia para unique_ptr no funciona en Eclipse

class Foo { void bar() { /* ... */ } }; 

std::unique_ptr<Foo> foo; 
(*foo).bar(); // 1 
foo->bar(); // 2 

Caso 1 funciona como se esperaba: no hay ninguna obra de error y la terminación automática. Para el caso 2, sin embargo, Eclipse marca la declaración con un error ("Método 'barra' no se pudo resolver"), además de autocompletar de foo-> no funciona.

Lo más interesante es que no tengo ningún problema con std::shared_ptr. Solo ocurre para std::unique_ptr.

¿Alguien ha tenido el mismo problema? ¿Alguien sabe una forma de solucionarlo?

EDIT: solo para aclarar, el proceso de compilación va bien para el fragmento de código que se muestra arriba. Entonces, el problema no está en el compilador en sí, sino en Eclipse.

+0

@dirk: la pregunta es sobre el autocompletado y la selección de pelusa estática en el IDE; sin mención de problemas de compilación. – Rook

+0

@dirkgently Estoy usando g ++ 4.6, por lo que la compilación va bien. El problema solo afecta a Eclipse. – betabandido

+0

@Rock: Correcto. Me perdí ese poco. – dirkgently

Respuesta

0

Finalmente encontré un bug report en CDT que describe el mismo problema que estoy sufriendo. Hasta ahora, no hay una verdadera solución para el problema, pero hay una solución que se explica en el informe de error:

Sí, GCC 4.5 es la última versión de GCC cuyas cabeceras biblioteca puede ser indexado por precisión CDT. La razón principal para no indexar 4.6 encabezados es la falta de CDT de soporte para 'constexpr' y 'nullptr', que se utilizan ampliamente en los encabezados 4.6 (¿hay alguna posibilidad de que se implemente para Juno, por cierto?).

que han trabajado en torno a este por tener tanto GCC 4.5 y 4.6 instalado en mi sistema , y señalando CDT a las cabeceras de 4.5 (mediante el establecimiento de la invocación del compilador comando para 'g ++ - 4.5' en opciones de descubrimiento), cuando en realidad compilando con 4.6.

0

Este problema ha sido reparado recientemente, en cdt 8.1.1. Simplemente vaya al help-> compruebe si hay actualizaciones y se descargará e instalará. He probado unique_ptr y está correctamente indexado.