Come abilitare C ++ 11 in Eclipse Juno / Kepler / Luna CDT?


85

EDIT: Si scopre che questo non è davvero specifico per Eclipse Kepler. Ho dovuto usare lo stesso processo per Eclipse Juno. Il problema era che sembra che mancassero passaggi in altri post che rispondevano alla stessa domanda.

Sto usando Eclipse Kepler per C ++ e sto cercando di usare C ++ 11 e ottenere errori. Quando compilo ricevo l'errore

errore: i cicli basati su intervallo per non sono consentiti in modalità C ++ 98

Ho seguito le istruzioni del post

Supporto per Eclipse CDT C ++ 11 / C ++ 0x

e la soluzione fornita per Eclipse Juno non funziona.

Diversi commenti hanno suggerito di riavviare Eclipse, pulire e ricostruire. Questo non ha fatto differenza.

Risposte:


183

Ci sono due cose che devi fare, prima devi configurare il tuo compilatore, quindi devi configurare il processore del linguaggio di CDT. Dal momento che non hai menzionato quale compilatore stai utilizzando, presumo che sia GCC ma i passaggi saranno simili per altri compilatori. (Nota che hai bisogno di un compilatore che supporti C ++ 11, ovviamente.)

L'impostazione del compilatore è abbastanza semplice:

  1. Fare clic con il pulsante destro del mouse sul progetto e fare clic su Proprietà
  2. In C / C ++ Build fai clic su Impostazioni
  3. In GCC C ++ Compiler, fai clic su Miscellaneous
  4. Nella casella Altri flag, aggiungi "-std = c ++ 11" all'elenco dei token.
  5. Fare clic su Applica e OK

A questo punto dovresti essere in grado di ricostruire il tuo progetto e farlo funzionare. Ma CDT potrebbe ancora mostrare errori per gli include C ++ 11. Ecco come risolverlo:

  1. Fare clic con il pulsante destro del mouse sul progetto e fare clic su Proprietà
  2. In C / C ++ Generale fai clic su "Preprocessore Includi percorsi, macro"
  3. Seleziona la scheda Provider
  4. Ci dovrebbe essere un elemento nell'elenco che dice qualcosa come "GCC Built in Compiler Settings". Seleziona questa voce.
  5. Deseleziona l'opzione "Usa provider globale ..."
  6. Sotto l'elenco c'è una casella che dice "Comando per ottenere le specifiche del compilatore". Aggiungi "-std = c ++ 0x" a questo.
  7. Spostare il provider "GCC Built in Compiler Settings" nella parte superiore dell'elenco utilizzando il pulsante "Sposta su" a destra.
  8. Fare clic su Applica e quindi su OK.
  9. Torna nell'area di lavoro di Eclipse, seleziona il menu Progetto, Indice C / C ++ e fai clic su "Risolvi include non risolti".

1
Grazie. Questo ha funzionato. Forse ho letto male l'altro post a cui mi collegavo, ma sembra che in quel post non ci fosse menzione della configurazione del compilatore.
user327301

1
Non funziona per me. Il mio problema principale è l'inclusione non risolta di c ++ 11. Ho inserito -std=c++11dove hai detto di mettere e ricostruito l'indice completo, mostra ancora un crapload di std :: cout, std :: set non riconosciuto, ecc ...
Dolanor

2
EDIT: non ho trovato la prima parte dove dovrebbe, ma sto compilando tramite make, quindi potrebbe essere una spiegazione. (L'ho trovato nella configurazione dell'area di lavoro e l'ho impostato). Ma l'ho inserito compiler spece ancora non funziona. std :: shared_ptr e lo stesso non riconosciuto. Anche se funzionava sulla vecchia macchina con juno.
Dolanor

1
Nel mio caso (gcc) ho usato -std = c ++ 0x. Quindi tutto funziona. Grazie!
Denis Zaikin

4
@MrEricSir esiste un modo per configurare questa impostazione per lo spazio di lavoro in modo che quando aggiungo un nuovo progetto venga automaticamente applicato anche ad esso?
Ivaylo Strandjev

25

Supporto di C ++ 11 in Eclipse Kepler Service Release 1 (ID build: 20130919-0819)

Nell'ultima versione di Eclipse Kepler SR1 devi solo aggiungere -std = c ++ 11

  1. Fare clic con il tasto destro sul progetto e fare clic su Proprietà
  2. Passare a C / C ++ Generale e Preprocessore Includi percorsi, macro ecc.
  3. Seleziona la scheda Provider
  4. Aggiungi -std = c ++ 11 al comando per ottenere le specifiche del compilatore:
  5. Applica le modifiche, l'indice dovrebbe essere generato automaticamente.

La riga "Comando per ottenere le specifiche del compilatore:" dovrebbe essere simile a:

${COMMAND} -E -P -v -dD "${INPUTS}" -std=c++11

2
Con GCC ho dovuto aggiungere -std = c ++ 0x
ccook

Quale GCC usi? c ++ 0X era il vecchio nome (alias) di C ++ 11
MeJ

1
L'ho trovato una seconda volta impostando un nuovo CDT di eclissi: la configurazione dovrebbe essere più intuitiva.
ccook


6

Uso Eclipse Kepler e per risolverlo ho fatto questo:

1 - Fare clic con il pulsante destro del mouse sul progetto >> Proprietà >> C / C ++ Build :: Impostazioni

2 - È andato al compilatore GCC G ++ >> Varie >> Altri flag

 i then added -std=c++11 
 hit apply and ok

Questo ha risolto il mio problema!

Spero sia stato d'aiuto!


Questa è la migliore risposta per la piattaforma Eclipse, versione: 4.3.1 - Non so cosa sia Kepler / Juno!
TCSGrad

Eclipse Kepler è la versione 4.3.X di Eclipse
Karrq

4

Esecuzione di eclipse indigo e cdt 8.0.2 qui. Ho seguito tutte le guide, ma era comunque necessario impostare manualmente la definizione del preprocessore per trovare cose come std :: unique_ptr. Il file di inclusione "memory" lo controlla. Impostare __cplusplus su 201103L nella scheda "Simboli" in "Percorsi e simboli" in "C ++ Generale" nelle proprietà del progetto.


Sì, funziona per le migrazioni da vecchi progetti.
Guy L

2

L'aggiunta del flag dialetto "-std = c ++ 11" a Proprietà progetto-> C / C ++ Build -> Impostazioni -> Impostazioni strumento (GCC C ++ Compiler -> Dialect) ha risolto il mio problema in Eclipse Kepler, a parte le impostazioni sopra indicate.


1

Sto usando Eclipse Luna e non ci sono "Impostazioni strumento" in C / C ++ Build -> Impostazioni. Ho FATTO add -std = c ++ 11 al compilatore specifiche riga di comando in "C / C ++ Generale -> preprocessore Include -> Provider", come suggerito. Ma ciò ancora non soddisfaceva la capacità del mio indicizzatore di risolvere emplace ().

Quindi ho cercato nel file di intestazione e ho scoperto che le funzioni di emplace dipendono da __cplusplus> = 201103L. Quindi ho appena aggiunto il simbolo del preprocessore "__cplusplus" e gli ho dato il valore 201103.

Un po 'hacker ma l'indicizzatore è felice. (E i makefile definiscono i miei flag di build, non il progetto eclipse)


0

La soluzione fornita da MrEricSir funziona solo dopo aver installato l'ultimo Eclipse Oxygen CDT. Non funziona per me con Mars CDT.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.