Ich versuche, meinen C ++ - Compiler auf C ++ 11 zu aktualisieren. Ich habe ein bisschen gesucht und bin zu dem Schluss gekommen, dass ich die Flagge verwenden muss -std=c++0x
oder -std=gnu++0x
, aber ich weiß nicht viel über Flaggen. Kann mir jemand helfen? (Ich benutze Ubuntu 12.04.)
Hier ist der Fehler, den ich vom Compiler erhalte, wenn ich versuche, eine Bibliothek zu verwenden, die in C ++ 11 enthalten ist (dh Array):
#include <array>
#include <iostream>
int main()
{
std::array<int, 3> arr = {2, 3, 5};
...
}
Diese Datei erfordert Compiler- und Bibliotheksunterstützung für den kommenden ISO C ++ - Standard C ++ 0x. Diese Unterstützung ist derzeit experimentell und muss mit den Compileroptionen -std = c ++ 0x oder -std = gnu ++ 0x aktiviert werden.
-std=c++11
stattdessen verwenden. Vielleicht sind aber beide erlaubt.g++-4.6
wird standardmäßig ausgeliefert (was nur unterstützt-std=c++0x
)g++
, zg++ -std=c++0x _filename_ && ./a.out
.Antworten:
Flags (oder Compileroptionen) sind nichts anderes als normale Befehlszeilenargumente, die an die ausführbare Compiler-Datei übergeben werden.
Angenommen, Sie rufen g ++ über die Befehlszeile (Terminal) auf:
$ g++ -std=c++11 your_file.cpp -o your_program
oder
$ g++ -std=c++0x your_file.cpp -o your_program
wenn das oben genannte nicht funktioniert.
quelle
-Wall -g
gleich nachg++
-Werror
, kein Grund, nicht beim Starten eines Projekts.Sie können Ihren
g++
Befehl per überprüfen :Hier erfahren Sie, auf welchen Complier er gerade zeigt.
g++
Führen Sie Folgendes aus, um zu 4.7 zu wechseln (vorausgesetzt, Sie haben es auf Ihrem Computer installiert):Wählen Sie dann
2
als Auswahl (Mein Computer zeigt bereits aufg++
4.7, also das *)Sobald Sie den Complier umgeschaltet haben, führen Sie ihn erneut aus, um
g++ --version
zu überprüfen, ob die Umschaltung korrekt erfolgt ist.Kompilieren Sie nun Ihr Programm mit
quelle
Ihr Ubuntu hat definitiv eine ausreichend aktuelle Version von g ++. Die zu verwendende Flagge ist
-std=c++0x
.quelle
I'm using Ubuntu 12.04.
in der Frage.Wenn Sie die GNU-Compiler-Erweiterungen beibehalten möchten, verwenden Sie -std = gnu ++ 0x anstelle von -std = c ++ 0x. Hier ist ein Zitat aus der Manpage:
quelle
?:
Operator? Die einzige andere Erweiterung, die mir in den Sinn kommt, Strukturausdrücke, wird durch die C ++ 11-Listeninitialisierung ersetzt. In jedem Fall bezieht sich dieses Zitat hauptsächlich auf C, nicht auf C ++.Sie können auf den folgenden Link verweisen, für den Funktionen in einer bestimmten Compilerversion unterstützt werden. Es enthält eine umfassende Liste der Funktionsunterstützung im Compiler. GCC folgt dem Standard genau und implementiert ihn vor jedem anderen Compiler.
In Bezug auf Ihre Frage können Sie mit kompilieren
g++ -std=c++11
für C ++ 11g++ -std=c++14
für C ++ 14g++ -std=c++17
für C ++ 17g++ -std=c++2a
Für C ++ 20 finden Sie unter diesem Link eine Liste der Funktionsunterstützungen in GCC , obwohl noch nicht alle Funktionen von C ++ 20 unterstützt werden .Die Liste ändert sich ziemlich schnell. Behalten Sie die Liste im Auge, wenn Sie darauf warten, dass eine bestimmte Funktion unterstützt wird.
quelle