
Rontogiannis Aristofanis
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 verwende 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 (z. B. 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.
Flags (oder Compiler-Optionen) sind nichts anderes als gewöhnliche 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.

Harajyoti Das
Sie können Ihre überprüfen g++
per Befehl:
which g++
g++ --version
Dadurch erfahren Sie, auf welchen Compiler er gerade zeigt.
Um zu wechseln g++
4.7 (vorausgesetzt, Sie haben es auf Ihrem Computer installiert), führen Sie Folgendes aus:
sudo update-alternatives --config gcc
There are 2 choices for the alternative gcc (providing /usr/bin/gcc).
Selection Path Priority Status
------------------------------------------------------------
0 /usr/bin/gcc-4.6 60 auto mode
1 /usr/bin/gcc-4.6 60 manual mode
* 2 /usr/bin/gcc-4.7 40 manual mode
Wählen Sie dann aus 2
als Auswahl (Meine Maschine zeigt bereits auf g++
4.7, also die *)
Sobald Sie den Compiler umschalten, führen Sie ihn erneut aus g++ --version
um zu überprüfen, ob die Umschaltung korrekt erfolgt ist.
Kompilieren Sie nun Ihr Programm mit
g++ -std=c++11 your_file.cpp -o main

jadhu
Sie können sich auf Folgendes beziehen Verknüpfung um zu wissen, welche Funktionen in welcher Version des Compilers unterstützt werden. Es hat eine erschöpfende Liste der Feature-Unterstützung in modernen Compilern. Scheint, als ob GCC dem Standard sehr genau folgt und vor jedem anderen Compiler implementiert.
In Bezug auf Ihre Frage können Sie mit kompilieren
g++ source_file.cpp -o executable_name -std=c++11
für C++11
g++ source_file.cpp -o executable_name -std=c++14
für C++14
g++ source_file.cpp -o executable_name -std=c++17
für C++17
g++ source_file.cpp -o executable_name -std=c++2a
Für C++20 werden noch nicht alle Funktionen von C++20 unterstützt. Beziehen Sie sich darauf Verknüpfung für die Feature-Support-Liste in GCC.
Die Liste ändert sich ziemlich schnell, behalten Sie die Liste im Auge, wenn Sie darauf warten, dass ein bestimmtes Feature unterstützt wird.

Michael Slade
Ihr Ubuntu hat auf jeden Fall eine ausreichend aktuelle Version von g++
. Das zu verwendende Flag ist -std=c++0x
.
Wenn Sie die GNU-Compiler-Erweiterungen beibehalten möchten, verwenden Sie -std=gnu++0x statt -std=c++0x. Hier ein Zitat aus der Manpage:
Der Compiler kann mehrere Basisstandards wie c89 oder c++98 und GNU-Dialekte dieser Standards wie gnu89 oder gnu++98 akzeptieren. Durch die Angabe eines Basisstandards akzeptiert der Compiler alle Programme, die diesem Standard folgen, und diejenigen, die GNU-Erweiterungen verwenden, die ihm nicht widersprechen. Beispielsweise deaktiviert -std=c89 bestimmte Funktionen von GCC, die mit ISO C90 nicht kompatibel sind, wie die Schlüsselwörter „asm“ und „typeof“, aber keine anderen GNU-Erweiterungen, die in ISO C90 keine Bedeutung haben, wie z. B. Auslassen das mittlere Glied eines „?:“-Ausdrucks. Andererseits werden durch die Angabe eines GNU-Dialekts eines Standards alle Funktionen aktiviert, die der Compiler unterstützt, selbst wenn diese Funktionen die Bedeutung des Basisstandards ändern und einige streng konforme Programme abgelehnt werden können. Der jeweilige Standard wird von -pedantic verwendet, um zu identifizieren, welche Funktionen GNU-Erweiterungen für diese Version des Standards sind. Beispielsweise würde -std=gnu89 -pedantic vor Kommentaren im C++-Stil warnen //, während -std=gnu99 -pedantic dies nicht tun würde.

Dada
Verwenden -std=c++11
Compiler-Flag für ISO C++11.
Weitere Einzelheiten zu C++-Compiler-Flags und -Optionen finden Sie unter Überprüfen Sie dies.
9859300cookie-checkC++11 mit g++ kompilierenyes
In der neuesten Version müssen Sie wahrscheinlich verwenden
-std=c++11
stattdessen. Vielleicht ist aber auch beides erlaubt.– Benutzer1203803
28. April 2012 um 12:56 Uhr
Da fehlt viel Kontext. Zeigen Sie den vollständigen Befehl, den Sie versucht haben (vielleicht sogar Beispielcode, den Sie zu kompilieren versucht haben), und was tatsächlich fehlgeschlagen ist.
– KillianDS
28. April 2012 um 12:56 Uhr
@classdaknok_t: beides sollte erlaubt sein, auch Ubuntu 12.04-Schiffe
g++-4.6
standardmäßig (was nur unterstützt-std=c++0x
)– KillianDS
28. April 2012 um 12:57 Uhr
Fügen Sie direkt danach Flaggen hinzu
g++
z.Bg++ -std=c++0x _filename_ && ./a.out
.– n. 1.8e9-wo-ist-meine-Aktie m.
28. April 2012 um 13:23 Uhr
Bin auf diesen Beitrag gestoßen und habe nach einer Fehlermeldung mit dem Titel gesucht. Ich arbeite an einem QMAKE-Projekt. Die Lösung für mich war das Hinzufügen von CONFIG += c++11 zur .pro-Datei.
– Benutzer1800885
12. Januar 2017 um 20:35 Uhr