Wie aktiviere ich C ++ 11 in Qt Creator?

167

Der Titel ist ziemlich selbsterklärend. Ich habe Qt Creator 2.7.0 heruntergeladen und versuche, einen grundlegenden C ++ 11-Code zu kompilieren:

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

Ich erhalte die folgende Fehlermeldung:

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

Laut diesem Artikel unterstützt diese Version von Qt Creator jedoch C ++ 11. Wie aktiviere ich es?

Andrey Chernukha
quelle
3
Qt Creator ist kein Compiler. Wenn Sie lesen, dass "Qt Creator C ++ 11 unterstützt", bedeutet dies, dass die Code-Vervollständigungs-Engine (in diesem Fall Clang) die C ++ 11-Syntax unterstützt.
cmannett85
@ cmannett85 Qt Creator verwendet Clang immer noch nicht als C ++ - Syntaxparser. Es gab Bemühungen, aber die API von Clang und die allgemeine Leistung dieser Lösung haben dies verzögert. Aktuelle Arbeiten in dieser Richtung finden Sie hier .
Rubenvb

Antworten:

261

Nach dieser Seite hinzufügen

CONFIG += c++11

in Ihre .pro-Datei (siehe unten auf dieser Webseite). Es erfordert Qt 5.


Die anderen Antworten schlagen vor

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

arbeiten auch mit Qt 4.8 und gcc / clang.

Ali
quelle
4
Anonyme Abstimmungen helfen niemandem. Was ist los mit der Antwort?
Ali
Das Problem war, dass ich Ihre doppelte / unvollständige Antwort nicht löschen konnte. Ich konnte sie nur ablehnen. Nachdem Sie es bearbeitet haben, um es präsentabler zu machen, bin ich nur mit der Ablehnung zufrieden.
Nurettin
9
@nurettin Danke für das Feedback. Wenn Sie die Bearbeitungshistorien der Antworten (meine und die anderen) sorgfältig untersuchen, werden Sie feststellen, dass meine ursprüngliche Antwort kein Duplikat war. Es war tatsächlich die andere Antwort, die schamlos einen Teil meiner Antwort gestohlen hat und meine Antwort wie ein Duplikat aussehen ließ. Dann erschienen dieses Jahr zwei weitere doppelte Antworten. Überprüfen Sie es selbst in den Bearbeitungsverläufen. Würden Sie angesichts dieser Informationen Ihre Ablehnung überdenken?
Ali
3
@Troyseph Hier ist mein Verständnis der Situation. Ich gehe davon aus, dass Sie gcc verwenden. Wenn eine Version von gcc unterstützt -std=c++11, sollte sie auch das (veraltete) -std=c++0xFlag unterstützen, und beide Flags sollen identische Effekte haben (was auf Ihrem Computer anscheinend nicht der Fall ist). Wenn ein Compiler unterstützt -std=c++0x, bedeutet dies nicht, dass er versteht -std=c++11. Daher ist die Auswahl -std=c++0xals Standard für den C ++ 11-Kompatibilitätsmodus eine vernünftige Wahl. Auf meiner Maschine, zumindest laut Manpage , -std=c++0xund -std=c++11sind identisch.
Ali
1
@Troyseph Nun ist es wahr, dass es besser wäre, es zu verwenden, -std=c++11wenn der Compiler es unterstützt, und Qt könnte klug genug sein, dies zu tun. Nun, wenn Ihnen dieses Problem so weh tut, können Sie einen Fehlerbericht einreichen ...
Ali
32

Fügen Sie dies Ihrer .pro-Datei hinzu

QMAKE_CXXFLAGS += -std=c++11

oder

CONFIG += c++11
LemonCool
quelle
18

Als Alternative für die Behandlung beider Fälle, die in Alis ausgezeichneter Antwort angesprochen werden, füge ich normalerweise hinzu

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

zu meinen Projektdateien. Dies kann nützlich sein, wenn Sie sich nicht wirklich darum kümmern, welche Qt-Version in Ihrem Team verwendet wird, aber Sie möchten, dass C ++ 11 auf jeden Fall aktiviert ist.

Яois
quelle
Dies sollte -std = c ++ 11 sein
Predrag Manojlovic
8

Fügen Sie Ihrer qmake-Datei hinzu

QMAKE_CXXFLAGS+= -std=c++11
QMAKE_LFLAGS +=  -std=c++11
Guardezi
quelle
4

Wenn Sie eine frühere Version von QT (<5) verwenden, versuchen Sie dies

QMAKE_CXXFLAGS += -std=c++0x
asloob
quelle
1

Der einzige Ort, an dem ich es erfolgreich zum Laufen gebracht habe, ist die Suche in:

... \ Qt \ {5.9; oder Ihre Version} \ mingw {53_32; oder Ihre Version} \ mkspecs \ win32-g ++ \ qmake.conf:

Dann an der Linie:

QMAKE_CFLAGS           += -fno-keep-inline-dllexport

Bearbeiten:

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