Comment activer C ++ 11 dans Qt Creator?

167

Le titre est assez auto-descriptif. J'ai téléchargé Qt Creator 2.7.0 et j'essaie de compiler du code de base C ++ 11:

int my_array[5] = {1, 2, 3, 4, 5};
for(int &x : my_array)
{
  x *= 2;
}

Je reçois l'erreur suivante:

range based for loops are not allowed in c++ 98 mode

Pourtant, selon cet article, cette version de Qt Creator prend en charge C ++ 11. Alors, comment puis-je l'activer?

Andrey Chernukha
la source
3
Qt Creator n'est pas un compilateur. Lorsque vous lisez que "Qt Creator prend en charge C ++ 11", cela signifie que le moteur de complétion de code (Clang dans ce cas) prend en charge la syntaxe C ++ 11.
cmannett85
@ cmannett85 Qt Creator n'utilise toujours pas Clang comme analyseur de syntaxe C ++. Il y a eu des efforts, mais l'API de Clang et les performances générales de cette solution ont retardé cela. Les travaux actuels dans ce sens se situent ici .
rubenvb

Réponses:

261

Selon ce site ajouter

CONFIG += c++11

à votre fichier .pro (voir au bas de cette page Web). Il nécessite Qt 5.


Les autres réponses, suggérant

QMAKE_CXXFLAGS += -std=c++11(ou QMAKE_CXXFLAGS += -std=c++0x)

fonctionne également avec Qt 4.8 et gcc / clang.

Ali
la source
4
Les votes négatifs anonymes n'aident personne. Quel est le problème avec la réponse?
Ali
Le problème était que je n'ai pas pu supprimer votre réponse en double / incomplète, tout ce que je pouvais faire était de voter contre. Maintenant que vous l'avez modifié pour le rendre plus présentable, je suis content du vote défavorable.
nurettin
9
@nurettin Merci pour vos commentaires. Si vous examinez attentivement les historiques d'édition des réponses (les miennes et les autres), vous verrez que ma réponse originale n'était pas un double; c'était en fait l'autre réponse qui a volé sans vergogne une partie de ma réponse, faisant en sorte que ma réponse ressemble à un double. Ensuite, deux autres réponses en double sont apparues cette année. Vérifiez-le vous-même dans l'historique des modifications. Compte tenu de cette information, reconsidéreriez votre vote défavorable?
Ali
3
@Troyseph Voici ma compréhension de la situation. Je suppose que vous utilisez gcc. Si une version de gcc prend en charge -std=c++11, alors elle devrait également prendre en charge l' -std=c++0xindicateur (obsolète) , et les deux indicateurs sont censés avoir des effets identiques (ce qui n'est apparemment pas le cas sur votre machine). Si un compilateur prend en charge -std=c++0x, cela ne signifie pas qu'il comprend -std=c++11. Par conséquent, choisir -std=c++0xpar défaut pour le mode de compatibilité C ++ 11 est un choix raisonnable. Sur ma machine, au moins selon la page de manuel , -std=c++0xet -std=c++11sont identiques.
Ali
1
@Troyseph Maintenant, il est vrai qu'il serait préférable de l'utiliser -std=c++11si le compilateur le supporte, et Qt pourrait être assez intelligent pour le faire. Eh bien, si ce problème vous fait trop mal, vous pouvez déposer un rapport de bogue ...
Ali
32

Ajoutez ceci à votre fichier .pro

QMAKE_CXXFLAGS += -std=c++11

ou

CONFIG += c++11
CitronCool
la source
18

Comme alternative pour traiter les deux cas abordés dans l'excellente réponse d'Ali, j'ajoute généralement

# With C++11 support
greaterThan(QT_MAJOR_VERSION, 4){    
CONFIG += c++11
} else {
QMAKE_CXXFLAGS += -std=c++0x
}

à mes fichiers de projet. Cela peut être pratique lorsque vous ne vous souciez pas vraiment de la version de Qt que les gens utilisent dans votre équipe, mais que vous voulez qu'ils aient C ++ 11 activé dans tous les cas.

Яois
la source
Cela devrait être -std = c ++ 11
Predrag Manojlovic
8

ajouter à votre fichier qmake

QMAKE_CXXFLAGS+= -std=c++11
QMAKE_LFLAGS +=  -std=c++11
Guardezi
la source
4

Si vous utilisez une version antérieure de QT (<5), essayez ceci

QMAKE_CXXFLAGS += -std=c++0x
asloob
la source
1

Le seul endroit où j'ai réussi à le faire fonctionner est en recherchant dans:

... \ Qt \ {5,9; ou votre version} \ mingw {53_32; ou votre version} \ mkspecs \ win32-g ++ \ qmake.conf:

Puis à la ligne:

QMAKE_CFLAGS           += -fno-keep-inline-dllexport

Éditer :

QMAKE_CFLAGS           += -fno-keep-inline-dllexport -std=c++11
Bretzelus
la source