2012-06-22 7 views
6

Dopo aver seguito la procedura descritta in this post sono riuscito a fare Eclipse (Indigo) riconoscere unique_ptr (e altre C++ 11 novità). Il problema è che operator-> per unique_ptr sembra non essere supportato in Eclipse. Qui si ha un esempio:operatore alla risoluzione del riferimento per unique_ptr non funziona in Eclipse

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

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

Caso 1 funziona come previsto: non v'è alcun errore e il completamento automatico opere. Per il caso 2, tuttavia, Eclipse contrassegna l'istruzione con un errore ("la barra del metodo" non può essere risolta "), inoltre il completamento automatico da foo-> non funziona.

Più interessante, non ho alcun problema con std::shared_ptr. Succede solo per std::unique_ptr.

Qualcuno ha riscontrato lo stesso problema? Qualcuno sa un modo per risolverlo?

MODIFICA: solo per scopi di chiarificazione, il processo di compilazione va bene per il frammento di codice mostrato sopra. Quindi, il problema non è nel compilatore stesso, ma su Eclipse.

+0

@dirk: la domanda riguarda il completamento automatico e la raccolta di lint statico nell'IDE; nessuna menzione di problemi di compilazione. – Rook

+0

@dirkgently Sto usando g ++ 4.6, quindi la compilazione va bene. Il problema riguarda solo Eclipse. – betabandido

+0

@Rock: giusto. Ho perso quel pezzettino. – dirkgently

risposta

0

Ho finalmente trovato uno bug report in CDT che descrive lo stesso problema che sto soffrendo. Finora, non c'è una vera e propria soluzione per il problema, ma c'è una soluzione spiegato in che bug report:

Sì, GCC 4.5 è l'ultima versione di GCC cui biblioteca intestazioni può essere accuratamente indicizzati da CDT. Il motivo principale per non aver indicizzato le intestazioni 4.6 è la mancanza di di CDT per "constexpr" e "nullptr", che sono ampiamente utilizzati nelle intestazioni 4.6 (a proposito, a proposito, potrebbero essere implementate per Giunone?).

ho lavorato intorno a questo avendo entrambi GCC 4.5 e 4.6 installato sul mio sistema , e indicando CDT alle intestazioni 4,5 di (impostando l'invocazione compilatore comando per 'g ++ - 4.5' in Opzioni Discovery), mentre in realtà compilazione con 4.6.

0

Questo problema è stato risolto di recente, in cdt 8.1.1. Vai su help-> controlla gli aggiornamenti e verrà scaricato e installato. Ho testato unique_ptr e viene indicizzato correttamente.