2012-03-19 21 views
5

Sto giocando con unique_ptr. Nelle mie persone last post mi hanno aiutato a compilare un programma che utilizzava questo puntatore specificando -std = C++ 0x durante la compilazione. Ora mi chiedevo se c'è un modo per istruire eclipse a prendere in considerazione il C++ 11 durante il completamento automatico?
unique_ptr non viene nella lista di std :: namespace, né posso trovare i metodi (reset, spostamento ...) associati con un unique_ptr.unique_ptr autocomplete in eclipse

Grazie Vahid

+0

So che qualcuno conosce tutti i 30 passaggi per farlo bene, ma vorrei passare a KDevelop e consentire funzione di completamento automatico;) –

+2

Il consiglio nell'ultimo commento su [questo bug] (https://bugs.eclipse.org/bugs/show_bug.cgi?id=314014) aiuta? Non uso Eclipse, quindi non posso provarlo. –

+0

@Als No, non ha funzionato, ma tanx. Per vostra informazione, ho aperto le proprietà del progetto-> C/C++ Build-> Discovery Options-> GCC C++ Compiler: in Compiler Gli argomenti di richiamo ho aggiunto -std = C++ 0x ma non ha funzionato. – rahman

risposta

1

Credo che si dovrebbe aggiungere __GXX_EXPERIMENTAL_CXX0X__ definizione alla tua "Percorsi e simboli" in Eclipse. Vedi anche questa domanda GNU C++ how to check when -std=c++0x is in effect? e la stessa domanda Eclipse indexer can't resolve shared_ptr per shared_ptr.

+0

non ce l'ha fatta. È possibile che qualcuno più esperto provi questo? – rahman

+0

@rahman, guarda la [stessa domanda] (http://stackoverflow.com/q/8312854/72178) per 'shared_ptr', OP ha riferito che ha funzionato. – ks1322

+0

Sono su Eclipse Juno e mentre l'impostazione di quel simbolo funziona per riconoscere std :: unique_ptr, l'indicizzatore contrassegna qualsiasi utilizzo di std :: move con un unique_ptr con un errore "argomento non valido". – Hans

3

L'intestazione "memoria" (probabilmente trovata in /usr/include/c++/4.9/memory) include solo "unique_ptr.h" e "shared_ptr.h" (probabilmente trovato in /usr/include/c++/4.9/ bits/unique_ptr.h e /usr/include/c++/4.9/bits/shared_ptr.h) se la macro "__cplusplus" è uguale o maggiore di "201103L". Controlla memoria.h per te stesso per vedere la condizione di "preprocessore #if" lì, alla riga 69 (o cerca la stringa "#if __cplusplus> = 201103L").

Come altri menzionato, compilazione con "-std = C++ 0x" o successivo C++ standard (-std = C++ 11 o -std = C++ 14) risolve gli errori di compilazione, ma non l'indicizzazione eclisse e problema di completamento automatico.

Per risolvere il problema di indicizzazione di eclissi ho aggiunto la macro di preprocessore "__cplusplus" alle proprietà di costruzione del progetto, con il valore "201103L", e in seguito ho aggiornato l'indice;

Per aggiungere la macro preprocessore:

"giusto fare clic sul progetto su progetti" >> >> proprietà C/C++ Generale >> preprocessore Include >> Inserzioni >> GNU C++ >> CDT utente Impostazioni voci> > Aggiungi ... >> Macro preprocessore;

Quindi immettere una macro con il nome "__cplusplus" e il valore "201103L";

In seguito, per aggiornare l'indice, fare:

"progetto di fare clic destro sul progetto explorer" >> Indice >> Ricostruzione;

Ps .: stavo usando gcc 4.9.2 e Eclipse Luna (4.4.2), su ubuntu 15.04 64bit

+0

Questa risposta mi ha aiutato molto, grazie :) –