Aktivieren der C++11/C++0x support in Eclipse CDT?
Eclipse 3.7.1
CDT 1.4.1
GCC 4.6.2
Dies ist ein Beispiel für ein Stück C++11 code:
auto text = std::unique_ptr<char[]>(new char[len]);
Den Eclipse-editor beschwert sich über:
Function 'unique_ptr' could not be resolved
Makefile Zusammenstellung funktioniert gut. Wie man Eclipse stoppen Sie beschweren sich über diese Art von Fehler?
Zumindest sollte es
Nicht sicher, ob das richtig ist -- char[] ist konvertierbar char* und unique_ptr<char> ist ein Zeiger auf char wie char*
Würde nicht
Nein, er hat Recht. Die Art und Weise Sie schrieb es wird dazu führen
Verwandte: stackoverflow.com/q/8889260/636019, stackoverflow.com/q/8763937/636019, stackoverflow.com/q/8564544/636019, stackoverflow.com/q/8312854/636019
std::unique_ptr<char[]>
Nicht sicher, ob das richtig ist -- char[] ist konvertierbar char* und unique_ptr<char> ist ein Zeiger auf char wie char*
Würde nicht
unique_ptr<char>
nennen delete
, das ist falsch, denn es wurde mit new[]
?Nein, er hat Recht. Die Art und Weise Sie schrieb es wird dazu führen
delete
genannt zu werden, wenn Sie müssen delete[]
genannt. Die unique_ptr<char>
davon ausgegangen, dass es immer ein Zeiger, der gelöscht wird mit delete
. unique_ptr<char[]>
erwartet ein array, welches gelöscht wird mit delete[]
richtig.Verwandte: stackoverflow.com/q/8889260/636019, stackoverflow.com/q/8763937/636019, stackoverflow.com/q/8564544/636019, stackoverflow.com/q/8312854/636019
InformationsquelleAutor Nick | 2012-02-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fand ich diese Artikel im Eclipse-forum, folgte einfach diese Schritte, und es funktioniert für mich. Ich benutze Eclipse Indigo 20110615-0604 auf Windows mit Cygwin setup.
-std=c++0x
(oder für neuere compiler-version-std=c++11
am Ende . ... anstelle von GCC C++ Compiler habe ich auch Cygwin compiler__GXX_EXPERIMENTAL_CXX0X__
(achten Sie auf append und prepend zwei Unterstriche) in "Name" und lassen Sie "Wert" leer.Gibt es eine Beschreibung, diese wird in der Eclipse-FAQ jetzt: Eclipse FAQ/C++11 Features.
Eclipse-Bild-Einstellung
Habe diese entfernen störende editor Fehler? Ich habe kein problem mit dem kompilieren, und neue std-Typen werden erkannt, aber ich kann nicht loswerden der editor syntax-Fehler für die range-basierte for-Schleifen und rvalue-Referenzen
&&
.Die Natürliche follow-up-Frage wird jetzt: können wir optimieren unseren workflow durch speichern dieser spezielle C++ Projekt Einstellungen in ein neues Eclipse-Projekt Vorlage, die sagen "C++11-Projekt"?
Hinweis: für alle, die sich für die Antwort für Juno, dieses funktioniert nicht.
Für kepler/juno, die Lösung ist gefunden in Antwort. Es ist geschrieben in den edit-Johan Lundberg Antworten unten, aber ich beachte Sie auch hier, um die akzeptierten Antworten mehr vollständig.
InformationsquelleAutor Carsten Greiner
Anleitung Für Eclipse CDT 4.4 Luna und 4,5 Mars
Ersten, bevor Sie erstellen Projekt, konfigurieren Sie Eclipse-syntax-parser:
Window
->Preferences
->C/C++
->Build
->Settings
->Discovery
->CDT GCC Build-in Compiler Settings
in das Textfeld Titel
Command to get compiler specs
Anhängen-std=c++11
Nun können Sie erstellen Projekt -, Konfigurations -, hängt davon ab, welche Art von Projekt, das Sie erstellt:
Für das Projekt erstellt: Datei -> New -> Projekt -> C/C++ -> C++ - Projekt
Rechtsklick auf erstelltes Projekt öffnen und
Properties
->C/C++ Build
->Settings
->Tool Settings
->GCC C++ Compiler
->Dialect
Setzen
-std=c++11
in Textfeld berechtigtother dialect flags
oder wählen SieISO C++11
von derLanguage standard
drop-down.Für CMake Projekt
Generieren eclipse-Projekt-Dateien (innerhalb des Projektes)
Dann importieren generierte Verzeichnis in eclipse als standard-eclipse-Projekt. Rechts klicken Sie auf Projekt, und öffnen Sie
Properties
->C/C++ General
->Preprocessor Include Paths, Marcos etc.
->Providers
aktivieren
CDT GCC Build-in Compiler Settings
und verschieben Sie Sie höher alsContributed PathEntry Containers
(Das ist wichtig)Letzten Gemeinsamen Schritt
neu kompilieren, regenerieren
Project
->C/C++ Index
und starten Sie Eclipse erneut.Keine andere Antwort war für mich auf Luna. Danke.
Super, funktioniert auf CMake-basierten Projekt
Funktionierte tadellos, auch ohne dass eclipse neu starten. Danke.
Für Eclipse Neon.3, mit einem C++ - Makefile-Projekt, der Projekt-Einstellung hinzufügen
-std=c++11
warProject Properties -> C/C++ General -> Preprocessor Include Paths, Macros etc. -> Providers [tab] -> CDT GCC Built-in Compiler Settings -> Command used to get compiler specs:
. Hängen Sie Ihre-std=c++11
. Ich hatte es in der global-workspace-Einstellungen darauf hindeutet, aber es war nicht kopiert, in die Lage, die ich oben beschreiben habe ich ein neuesMakefile
Projekt.InformationsquelleAutor Trismegistos
Update 2016:
Als der gcc-6 (änderungen), die Standard-C++ - Dialekt ist C++14. Das bedeutet, dass, wenn Sie explizit benötigen Sie eine neuere oder ältere Dialekt als als die, die Sie nicht brauchen, etwas zu tun mit eclipse nicht mehr.
Für Luna und Mars
Dieser community wiki-Abschnitt enthält die Antwort von Trismegistos;
1. Vor dem erstellen Projekt, konfigurieren Sie Eclipse-syntax-parser:
Fenster -> Einstellungen -> C/C++ -> Erstellen -> Einstellungen -> Entdeckung -> CDT, GCC-Build-Compiler-Einstellungen
in das Textfeld Titel den Befehl zu bekommen compiler specs Anhängen
-std=c++14
2. Erstellen von Projekt -, Konfigurations -, hängt davon ab, welche Art von Projekt, das Sie erstellt:
Für das Projekt erstellt: Datei -> New -> Projekt -> C/C++ -> C++ - Projekt
Rechtsklick auf erstelltes Projekt öffnen und
Eigenschaften -> C/C++ Build -> Einstellungen -> Tools-Einstellungen -> GCC-C++ - Compiler -> Dialekt
Setzen
-std=c++14
in Textfeld berechtigt, anderen Dialekt Fahnen oder wählen Sie ISO-C++11 die Sprache, standard-drop-down.Es gibt jetzt eine neue Möglichkeit, dies zu lösen, ohne die GXX_EXPERIMENTAL hack.
Für die meisten aktuellen Versionen: (Derzeit
Juno und KeplerLuna):Unter neueren Versionen von Juno die Einstellungen befinden sich auf
Project properties -> C/C++ General -> Preprocessor Include Paths, Macros etc. -> tab Providers -> CDT GCC Builtin Compiler Settings ()
.Älteren Versionen 2012/2013:
Unter C/C++ Build (auf Projekt-Einstellungen), suchen Sie die - Präprozessor-Include - Weg und gehen zu den Registerkarte Provider. Deaktivieren Sie alle außer CDT, GCC-Builtin-Compiler-Einstellungen. Dann untag Freigabe-Einstellungen Einträge ... . Fügen Sie die option -std=c++11 dem Textfeld genannt Befehl aus, um compiler-Spezifikationen.
Gehen, Pfade und Symbole. Unter Symbole auf wiederherstellen, und dann anwenden.
Hinweise:
Eclipse ist wählerisch zu schlagen gilt, Sie müssen es tun, jedes mal, wenn du eine Registerkarte "Einstellungen".
[Eigenwerbung]: ich schrieb meine eigenen mehr detaillierte Anweisungen, basierend auf den oben genannten.
http://scrupulousabstractions.tumblr.com/post/36441490955/eclipse-mingw-builds
Dank der Benutzer
Nobody
bei https://stackoverflow.com/a/13635080/1149664#ifndef __GXX_EXPERIMENTAL_CXX0X__
gibt true zurück, und der code darunter wird nicht geparst. Wenn ich__GXX_EXPERIMENTAL_CXX0X__
zu Projekt-Symbole, array aufgelöst wird, aber mein Projekt Verweise Durcheinander gebracht. Was könnte hier das problem?Ich denke, es ist ein bug. Ich wieder hergestellt es so: Öffnen Sie eine neue Projekt. Aktivieren der c++11-features. Hinzufügen eines random-Klasse mit einer public Variablen. Erstellen Vektor der zufälligen Klasse. Holen Sie sich den iterator. Versuchen Sie, für den Zugriff auf öffentliche Variablen. Entweder mein Arbeitsbereich ist beschädigt oder es ist ein Fehler in Eclipse, dass nicht analysiert werden kann.
Ich fand diesen gleichen Fehler. Wenn ich den editor für c++11, Iteratoren nicht lösen können. Wenn ich nicht, std::unique_ptr nicht lösen können. Wirklich ärgerlich, da ich beide verwenden.
Ich habe den bug gemeldet. bugs.eclipse.org/bugs/show_bug.cgi?id=397027 . Es ist ziemlich ärgerlich und ich begann die Verwendung von boost-Bibliotheken, die Sie nicht produzieren den Fehler 🙂
funktioniert für mich! Danke!!! (hab es durch Ihre Referenz) ich'va Hinzugefügt -std=c++11 Anbieter und Standardeinstellungen wiederherstellen", in Symbolen. Ich denke, restore default in Symbolen spart mir. Jetzt unique_ptr ist die Lösung.
InformationsquelleAutor Johan Lundberg
Für die neueste (Juno) eclipse-cdt die folgenden arbeitete für mich, keine Notwendigkeit zu erklären
__GXX_EXPERIMENTAL_CXX0X__
auf mich. Dies funktioniert für die CDT-indexer und als parameter für den compiler:"euer Projekt name" -> Rechte Maustaste -> Eigenschaften:
C/C++ General -> Preprocessor Include Paths, Macros etc. -> wechseln Sie zu der Registerkarte mit der Bezeichnung "Provider":
zur "Konfiguration" wählen Sie "Release" und danach "debug")
schalten Sie alle Anbieter zu und wählen Sie einfach "CDT, GCC Built-in Compiler-Einstellungen"
deaktivieren Sie die Option "Freigeben Einstellung der Einträge zwischen den Projekten (globaler Anbieter)"
in der "Befehl zu bekommen compiler specs:" hinzufügen "-std=c++11" ohne die Anführungszeichen ein (eventuell Arbeit mit Zitaten zu)
drücke auf übernehmen und schließen Sie das Optionen
den index neu erstellen
Nun alle c++11-bezogene Sachen die behoben werden sollten richtig durch den indexer.
win7 x64, neueste offizielle eclipse mit cdt
mingw-w64 gcc 4.7.2 aus der mingwbuilds Projekt auf sourceforge
u müssen, um eine Kompilierung mit den neuen Einstellungen, so dass der parser "lernen", dass die std=c++11 flag gesetzt ist
je nach compiler-version kann es notwendig sein, add-std=c++0x anstelle von-std=c++11 (z.B. debian wheezy)
Während die oben genannten Antworten nicht den trick tun, das man hat.
InformationsquelleAutor Andreas
Ich hatte das gleiche problem auf meinem Eclipse Juno. Diese Schritte lösen das problem :
Project -> Properties -> C/C++ General -> Path and Symbols -> Tab [Symbols]
.dies funktioniert nicht für Eclipse Juno, das auf windows läuft(für mich), ich sehe immer noch diejenigen, die sich beschwert un-nötig Fehler, trotz der binären gut funktioniert. Bitte helfen Sie mir!!!
Ich bin wirklich Leid, ich kann dir nicht helfen, auf Windows habe ich nicht die Möglichkeit zu versuchen, auszuführen, die zu einer C++ - Projekt auf diesem OS. Ich Wünsche dir das beste und viel Glück !
Funktioniert nicht bei mir auf dem Mars.
InformationsquelleAutor Jerome
For Eclipse Kepler CDT was für mich gearbeitet, um loszuwerden
std::thread
unresolved symbol:Gehen Sie zu Einstellungen->C/C++->Erstellen->Einstellungen
Wählen Sie die Registerkarte "Discovery"
Wählen CDT, GCC Built-in Compiler-Einstellungen [Geteilt]
Option-std=c++11 " - Befehl, um die compiler specs:" - Feld wie:
Hinzufügen
-std=c++11
ProjektProperties/C/C++ Build->Settings->Tool Settings->GCC C++ Compiler->Miscellaneous->Other
Flags war nicht genug für Kepler, aber es war genug für ältere Versionen wie Helios.
InformationsquelleAutor user3348915
Kann ich noch nicht kommentieren, so Schreibe meine eigene Antwort:
Hängt es mit
__GXX_EXPERIMENTAL_CXX0X__
und es ist gültig für Eclipse Juno und CDT-8.x.Einige Teile dieser Antwort sind bereits in anderen Antworten, aber ich möchte es stimmig sein.
Machen es möglich zu bauen, die mit stdc++11, eine hinzufügen, die spezifische Kennzeichnung für den compiler. Sie können dies über die Projekteigenschaften. Zum ändern von Projekteigenschaften
RMB
undProject properties
oderALT + ENTER
. Dann C/C++ Build -> Einstellungen -> Tools-Einstellungen -> GCC-C++ - Compiler -> Diverses -> Andere Flaggen. Put-std=c++11 am Ende der Zeile, für die GCC-es wird etwa so Aussehen:-c -fmessage-length=0 -std=c++11
. Durch das hinzufügen von -stdc++11 flag-compiler (GCC) erklären__GXX_EXPERIMENTAL_CXX0X__
von selbst.An dieser Stelle können Sie bauen-Projekt mit allen Vorteilen von C++11.
Das problem ist, dass Eclipse hat seinen eigenen parser auf Fehler überprüfen - das ist, warum Sie immer noch alle böse Fehler im Eclipse-editor, während zur gleichen Zeit, können Sie erstellen und ausführen des Projekts ohne. Es ist ein Weg, um dieses problem zu lösen, indem Sie explizit zu deklarieren
__GXX_EXPERIMENTAL_CXX0X__
Flagge für das Projekt, kann man das machen (genau wie Carsten Greiner sagte):C/C++ General -> Pfade und Symbole -> Symbole -> GNU C++. Klicken Sie auf "Hinzufügen..." und Vergangenheit
__GXX_EXPERIMENTAL_CXX0X__
(achten Sie auf append und prepend zwei Unterstriche) in "Name" und lassen Sie "Wert" leer.Und jetzt ist der extra-Teil wollte ich im Kommentar auf die erste Antwort, gehe zu:
C/C++ General -> Präprozessor-Include-Pfad Makros etc. -> Provider, und Wählen Sie
CDT Managed Build Setting Entries
klicken Sie dann auf ÜBERNEHMEN und gehen Sie zurück zum Reiter Einträge, unter der GNU C++ sollte es jetzt CDT Managed Build-Einstellung Einträge, prüfen Sie, ob im inneren ist definiert__GXX_EXPERIMENTAL_CXX0X__
wenn es -> ANWENDEN und index neu erstellen, sollten Sie in Ordnung sein an dieser Stelle.InformationsquelleAutor ravwojdyla
Hatte ich diverse Probleme (Ubuntu 13.04 64-bit, g++-4.8, eclipse Juno 3.8.1, CDT 6.0.0). Eine Menge Dinge sind bereits erwähnt, tut mir Leid zu wiederholen, aber darüber hinaus hatte ich Probleme unter Verwendung
als Teil von c++11 (hinzufügen -pthread für den linker löst dieses Problem). Sowieso, schließlich sind diese Einstellungen geklappt:
Projekt -> Eigenschaften -> C/C++ Build -> Einstellungen -> Sonstiges. Fügen Sie die
flag für GCC-und G++ - Compiler. Klicken Sie Auf Anwenden.
Für den linker, gleichen Fenster, Sonstiges, Linker flags, fügte der
Flagge. Shared-library-Einstellungen, Shared-object name, fügen Sie die
Flagge zu. Klicken Sie Auf Anwenden.
C/C++ General -> Pfade und Symbole -> REGISTERKARTE Symbole, GNU C++ ausgewählt, Fügen Sie die
(kein Wert)
Flagge. Klicken Sie Auf Anwenden.
C/C++ General -> Präprozessor-Include-Pfaden.. -> Registerkarte Anbieter : überprüfen Sie
CDT, GCC built-in Compiler-Einstellungen
und für "Befehl aus, um compiler specs", fügen Sie die
Flagge. Deaktivieren Sie Die Option Teilen. Klicken Sie Auf Anwenden.
CDT Managages Build-Einstellung Einträge, überprüfen Sie diese auch. Deaktivieren Sie die beiden anderen. Klicken Sie Auf Anwenden.
Geht zurück auf den Reiter Einträge, GNU C++ - CDT Managages Build-Einstellung Einträge, Sie sollte nun sehen, Ihre Hinzugefügt
Eintrag.
Das ist es. Bei der Codierung, Eingabe
können jetzt auto-complete thread-Klasse für die Instanz, baut, sollte funktionieren und es sollte keine
zur Laufzeit.
Project -> Properties -> C/C++ Build -> Settings -> Miscellaneous
Schritt, der für mich gearbeitet. Dank einem Haufen 😀InformationsquelleAutor Ola Aronsson
Ich weiß nicht, ob es ist nur mir, dem höchsten Rang der Lösung nicht für mich arbeiten, meine eclipse version ist nur die normale eclipse-Plattform installiert mit sudo apt-get install eclipse in Ubuntu
Aber ich habe eine Lösung gefunden, die nimmt Methode zusammen mit dem höchsten Rang-Lösung und das zweite, was ich getan habe damit es funktioniert, ist wie unten beschrieben (Beachten Sie, dass für die weiteren Schritte, wie das erstellen einer C++ - Projekt etc. wird ignoriert, für die Einfachheit)
Sobald Sie erstellt haben, die C++ - Projekt
(1) C/C++ General -> Pfade und Symbole -> Symbole -> GNU C++. Klicken Sie auf "Hinzufügen..." und fügen Sie GXX_EXPERIMENTAL_CXX0X (achten Sie auf append und prepend zwei Unterstriche) in "Name" und lassen Sie "Wert" leer.
(2) Unter C/C++ Build (auf Projekt-Einstellungen), suchen Sie die Präprozessor-Include-Pfad und gehen Sie auf die Registerkarte Anbieter. Deaktivieren Sie alle außer CDT, GCC-Builtin-Compiler-Einstellungen. Dann untag Freigabe-Einstellungen Einträge ... . Fügen Sie die option -std=c++11 mit dem Textfeld namens-Befehl zu bekommen compiler specs
Nach der oben durchgeführten 2 und 2 nur Schritte, es funktioniert, die eclipse ist in der Lage, zu beheben, der unique_ptr, ich weiß nicht, warum diese Lösung funktioniert, hoffe, dass es den Menschen helfen können.
InformationsquelleAutor doody1986
Eclipse C/C++ nicht erkennt das symbol
std::unique_ptr
obwohl Sie eingeschlossen haben, die C++11 memory-header in der Datei.Vorausgesetzt, Sie sind mit dem GNU C++ - compiler, das ist, was ich getan habe um dies zu beheben:
Projekt -> Eigenschaften -> C/C++ General -> Präprozessor-Include-Pfaden -> GNU C++ -> CDT Einstellung Benutzer-Einträge
Klicken Sie auf die "Hinzufügen..." - button
Wählen Sie "Präprozessor-Makro" aus dem dropdown-Menü
Drücke auf Übernehmen und dann auf OK, gehen Sie zurück zu Ihrem Projekt
Dann neu erstellen Sie C++ - index: Projekte -> C/C++, Index -> Rebuild
InformationsquelleAutor Rubens Gomes
Für mich auf Eclipse Neon ich folgteTrismegistos Antwort hier oben , ABER ich habe auch einen zusätzlichen Schritt:
Drücke auf übernehmen und OK.
Cheers,
Kerl.
InformationsquelleAutor Guy Avraham
InformationsquelleAutor Sameera Chanaka
Weder hack noch die sauberere version der Arbeit für Indigo. Der hack wird ignoriert, und die erforderlichen Konfigurationsoptionen fehlen. Ohne ersichtlichen Grund, zu bauen angefangen zu arbeiten, nach nicht funktioniert und nicht hilfreiche Grund, warum. Zumindest von der Kommandozeile aus, bekomme ich reproduzierbare Ergebnisse.
InformationsquelleAutor Jerry Miller
Unterstützung für C++14 in Eclipse Luna, konnten Sie diese Schritte:
C++ General -> Preprocessor Include -> Providers -> CDT Cross GCC Built-in Compiler Settings
hinzufügen "-std=c++14"C++ Build -> Settings -> Cross G++ Compiler -> Miscellaneous
hinzufügen "-std=c++14"Reindex Ihr Projekt und schließlich starten Sie Eclipse erneut. Es sollte funktionieren wie erwartet.
InformationsquelleAutor Jerome
Ich löste es auf diese Weise auf einem Mac. Ich benutzte Homebrew installieren Sie die neueste version von gcc/g++. Sie landen in /usr/local/bin mit includes in /usr/local/include.
Ich die CD würde in /usr/local/bin und machte einen symlink von g++@7whatever nur g++ Ursache, dass @ bit ist ärgerlich.
Dann ging ich auf MyProject -> Eigenschaften -> C/C++ Build -> Einstellungen -> GCC-C++ - Compiler und geändert mit dem Befehl "g++" auf "/usr/local/bin/g++". Wenn Sie sich entschließen, nicht den symbolischen link, können Sie spezifischer werden.
Tun die gleiche Sache für den linker.
Anwenden und Anwenden und Schließen. Lassen Sie den index neu erstellen. Für eine Weile, es zeigte sich eine gewaltige Anzahl von Fehlern, aber ich glaube, das war während des Aufbaus von Indizes. Während ich war, herauszufinden, den Fehler, Sie alle verschwanden, ohne weitere Maßnahmen.
Ich denke, ohne zu überprüfen, dass könnten Sie auch in Eclipse -> Eigenschaften -> C/C++ -> Core Build-Toolchains und Bearbeiten diese mit unterschiedlichen Pfaden, aber ich bin mir nicht sicher, was das tun wird.
InformationsquelleAutor Joseph Larson
Ich hatte ein ähnliches problem mit Eclipse C++ 2019-03 für eine gemischte C-und C++ - Projekt, das verwendet std::optional und std::swap. Was für mich gearbeitet wurde. Im Projekt
Eigenschaften->C/C++ Build->Einstellungen->Tools-Einstellungen->Cross G++ - Compiler, entfernen -std=gnu++17 aus Sonstiges aus und legen es in Dialekt->Anderen Dialekt Flags statt.
InformationsquelleAutor dc42