2013-06-04 15 views
6

La mia domanda principale è, quando si usa Qt Creator come editor di codice per progetti "generici" (non-Qt), come si dice di usare C++ 11 evidenziazione della sintassi?Qt Creator C++ 11 evidenziazione della sintassi per progetti generici

Ho un progetto C++ 11 su cui ho lavorato per un po 'e ho deciso di provare Qt Creator. Questo è un semplice progetto C++ vanilla, con un makefile codificato a mano e così via.

Qt Creator ha aperto il progetto ("eSLIME") e ha creato tre file: eSLIME.config, eSLIME.includes ed eSLIME.files. Non ha creato un file .pro.

Sembra non riconoscere le chiamate C++ 11. Ad esempio, sottolinea "#include <unordered_set>" in verde e indica che non esiste tale file o directory.

Ho il sospetto che dovrei inserire qualcosa nel file .config, ma non riesco a capire cosa e le ricerche di Google non stanno aiutando. Ho provato ad aggiungere -std = C++ 0x, che non ha funzionato.

PS: il codice è troppo rotto per essere compilato in questo momento, motivo per cui stavo passando a un IDE.

+0

Hai provato ad aggiungere la rispettiva directory nel tuo file eSLIME.includes? Per esempio. unordered_map si trova in /usr/include/c++/4.4/ sul mio sistema. Questo è un percorso da aggiungere in modo che QtCreator lo analizzi. – ypnos

+0

Ha funzionato! Grazie. –

+0

Tuttavia, sarebbe bello farlo funzionare in modo nativo, poiché tendo a lavorare su piattaforme con diverse versioni di C++. :) –

risposta

1

Qt 5.0.2 supporto C++ 11 sintassi per qualsiasi file C++ poi

basta scaricare QT 5.0.2 (Qt Creator 2.7.0 inclusa).

+0

Grazie, Meysam e fasked! –

7

Sono passati 2 anni da questa domanda e risposta, ma nulla è cambiato in Qt Creator (almeno per Linux): anche la versione più recente (ora è 3.5) non può analizzare le intestazioni C++ 11.

Il problema è che per default __cplusplus in interno Qt Creator parser definito per un valore inferiore a 201103L, ci sono un sacco di controlli di questa macro in intestazioni STL, qualcosa di simile:

#if __cplusplus < 201103L 
#include <bits/c++0x_warning.h> 
// disable all tasty functionality 
#endif 

In primo luogo ho provato ad aggiungere a * .config la seguente riga:

#define __cplusplus 201103L 

Non è successo niente.

Dopo alcune indagini ho finalmente trovato la soluzione corretta: basta scrivere in * .config:

#define __cplusplus 201103 

Magicamente tutto diviene vivo!

Problemi correlati