Wie aktiviere ich C ++ 11 in Eclipse Juno / Kepler / Luna CDT?

85

EDIT: Es stellt sich heraus, dass dies wirklich nicht spezifisch für Eclipse Kepler ist. Ich musste den gleichen Prozess für Eclipse Juno verwenden. Das Problem war, dass in anderen Posts, in denen dieselbe Frage beantwortet wurde, anscheinend Schritte fehlen.

Ich verwende Eclipse Kepler für C ++ und versuche, C ++ 11 zu verwenden und Fehler zu erhalten. Beim Kompilieren erhalte ich den Fehler

Fehler: Bereichsbasierte for-Schleifen sind im C ++ 98-Modus nicht zulässig

Ich habe die Anweisungen aus der Post befolgt

Unterstützung für Eclipse CDT C ++ 11 / C ++ 0x

und die für Eclipse Juno angegebene Lösung funktioniert nicht.

Verschiedene Kommentare haben vorgeschlagen, Eclipse neu zu starten und zu bereinigen und neu zu erstellen. Das hat keinen Unterschied gemacht.

user327301
quelle

Antworten:

183

Sie müssen zwei Dinge tun: Zuerst müssen Sie Ihren Compiler einrichten, dann müssen Sie den Sprachprozessor von CDT einrichten. Da Sie nicht erwähnt haben, welchen Compiler Sie verwenden, gehe ich davon aus, dass es sich um GCC handelt, aber die Schritte sind für andere Compiler ähnlich. (Beachten Sie, dass Sie natürlich einen Compiler benötigen, der C ++ 11 unterstützt.)

Das Einrichten des Compilers ist ziemlich einfach:

  1. Klicken Sie mit der rechten Maustaste auf Ihr Projekt und klicken Sie auf Eigenschaften
  2. Klicken Sie unter C / C ++ Build auf Einstellungen
  3. Klicken Sie unter GCC C ++ Compiler auf Verschiedenes
  4. Fügen Sie im Feld Andere Flags "-std = c ++ 11" an die Liste der Token an.
  5. Klicken Sie auf Übernehmen und auf OK

Zu diesem Zeitpunkt sollten Sie in der Lage sein, Ihr Projekt neu zu erstellen und zum Laufen zu bringen. CDT zeigt jedoch möglicherweise weiterhin Fehler für C ++ 11-Includes an. So können Sie das beheben:

  1. Klicken Sie mit der rechten Maustaste auf Ihr Projekt und klicken Sie auf Eigenschaften
  2. Klicken Sie unter C / C ++ General auf "Preprozessor Include Paths, Macros".
  3. Wählen Sie die Registerkarte Anbieter
  4. Die Liste sollte ein Element enthalten, das etwa "GCC Built in Compiler Settings" enthält. Wählen Sie diesen Eintrag.
  5. Deaktivieren Sie die Option "Globalen Anbieter verwenden ..."
  6. Unter der Liste befindet sich ein Feld mit der Aufschrift "Befehl zum Abrufen der Compilerspezifikationen". Fügen Sie "-std = c ++ 0x" hinzu.
  7. Verschieben Sie den Anbieter "GCC Built in Compiler Settings" oben in der Liste mit der Schaltfläche "Nach oben" auf der rechten Seite.
  8. Klicken Sie auf Übernehmen und dann auf OK.
  9. Wählen Sie in Ihrem Eclipse-Arbeitsbereich das Projektmenü C / C ++ - Index aus und klicken Sie auf "Nicht aufgelöste Includes erneut auflösen".
MrEricSir
quelle
1
Danke dir. Das hat funktioniert. Vielleicht habe ich den anderen Beitrag, auf den ich verlinkt habe, falsch gelesen, aber anscheinend wurde in diesem Beitrag nicht erwähnt, dass der Compiler eingerichtet werden soll.
user327301
1
Funktioniert bei mir nicht Mein Hauptproblem ist das ungelöste c ++ 11 enthält. Ich habe -std=c++11dort eingegeben, wo Sie gesagt haben, und den vollständigen Index neu erstellt. Es wird immer noch eine Menge nicht erkannter std :: cout, std :: set usw.
angezeigt.
2
EDIT: Ich habe den ersten Teil nicht gefunden, wo er sein sollte, aber ich kompiliere durch make, also kann es eine Erklärung sein. (Ich fand es jedoch in der Arbeitsbereichskonfiguration und stellte es ein). Aber ich habe es in die compiler specund funktioniert immer noch nicht. std :: shared_ptr und dasselbe nicht erkannt. Obwohl es früher auf der älteren Maschine mit juno funktioniert hat.
Dolanor
1
In meinem Fall (gcc) habe ich -std = c ++ 0x verwendet. Also funktioniert alles. Danke dir!
Denis Zaikin
4
@ MrEricSir Gibt es eine Möglichkeit, diese Einstellung für den Arbeitsbereich vorzunehmen, damit sie beim Hinzufügen eines neuen Projekts automatisch auch darauf angewendet wird?
Ivaylo Strandjev
25

C ++ 11-Unterstützung in Eclipse Kepler Service Release 1 (Build-ID: 20130919-0819)

In der neuesten Version von Eclipse Kepler SR1 müssen Sie nur -std = c ++ 11 hinzufügen

  1. Klicken Sie mit der rechten Maustaste auf Ihr Projekt und klicken Sie auf Eigenschaften
  2. Navigieren Sie zu C / C ++ - Allgemein und Präprozessor enthalten Pfade, Makros usw.
  3. Wählen Sie die Registerkarte Anbieter
  4. Fügen Sie -std = c ++ 11 zu Command hinzu, um die Compilerspezifikationen abzurufen:
  5. Übernehmen Sie Änderungen, der Index sollte automatisch generiert werden.

Die Zeile "Befehl zum Abrufen der Compilerspezifikationen:" sollte folgendermaßen aussehen:

${COMMAND} -E -P -v -dD "${INPUTS}" -std=c++11
MeJ
quelle
2
Mit GCC musste ich -std = c ++ 0x
ccook
Welches GCC verwenden Sie? c ++ 0X war der alte Name (Alias) für C ++ 11
MeJ
1
Es wurde ein zweites Mal festgestellt, dass ein neues Eclipse-CDT eingerichtet wurde. Das Einrichten sollte intuitiver sein.
Ccook
6

Ich benutze Eclipse Kepler und um das Problem zu beheben, habe ich Folgendes getan:

1 - Klicken Sie mit der rechten Maustaste auf das Projekt >> Eigenschaften >> C / C ++ Build :: Einstellungen

2 - Ging zum GCC G ++ Compiler >> Verschiedenes >> Andere Flags

 i then added -std=c++11 
 hit apply and ok

Das hat mein Problem behoben!

Ich hoffe es hat geholfen!

Karrq
quelle
Dies ist die beste Antwort für Eclipse Platform, Version: 4.3.1 - Weiß nicht, was Kepler / Juno ist!
TCSGrad
Eclipse Kepler ist Eclipse Version 4.3.X
Karrq
4

Hier läuft Eclipse Indigo und CDT 8.0.2. Ich habe alle Anleitungen befolgt, aber es war immer noch notwendig, den Präprozessor von Hand zu definieren, um Dinge wie std :: unique_ptr zu finden. Die Include-Datei "Speicher" überprüft dies. Setzen Sie __cplusplus auf 201103L auf der Registerkarte "Symbole" unter "Pfade und Symbole" in "C ++ Allgemein" in den Projekteigenschaften.

David Karla
quelle
Ja, funktioniert für Migrationen aus alten Projekten.
Guy L
2

Das Hinzufügen des Dialektflags "-std = c ++ 11" zu den Projekteigenschaften-> C / C ++ Build -> Einstellungen -> Werkzeugeinstellungen (GCC C ++ - Compiler -> Dialekt) löste mein Problem in Eclipse Kepler, abgesehen von den oben angegebenen Einstellungen.

mluthra
quelle
1

Ich verwende Eclipse Luna und es gibt keine "Werkzeugeinstellungen" unter C / C ++ Build -> Einstellungen. I DID add -std = c ++ 11 an der Befehlszeile specs Compiler unter "C / C ++ Allgemein -> Preprocessor Inklusive -> Provider" , wie vorgeschlagen. Aber das befriedigte immer noch nicht die Fähigkeit meines Indexers, emplace () aufzulösen.

Also habe ich in der Header-Datei nachgesehen und festgestellt, dass die Emplace-Funktionen von __cplusplus> = 201103L abhängig sind. Also habe ich gerade das Präprozessorsymbol "__cplusplus" hinzugefügt und ihm den Wert 201103 gegeben.

Ein bisschen hackisch, aber der Indexer ist glücklich. (Und Makefiles definieren meine Build-Flags, nicht das Eclipse-Projekt)

Miles F. Bintz II
quelle
0

Die von MrEricSir bereitgestellte Lösung funktioniert erst, nachdem das neueste Eclipse Oxygen CDT installiert wurde. Bei Mars CDT funktioniert das nicht.

StndFish
quelle