Eclipse 3.7.1 CDT 1.4.1 GCC 4.6.2
Dies ist ein Beispiel für einen Teil des C ++ 11-Codes:
auto text = std::unique_ptr<char[]>(new char[len]);
Der Eclipse-Editor beschwert sich über:
Function 'unique_ptr' could not be resolved
Die Makefile-Kompilierung funktioniert einwandfrei. Wie kann Eclipse aufhören, sich über diese Art von Fehlern zu beschweren?
c++
eclipse
c++11
eclipse-cdt
Nick
quelle
quelle
std::unique_ptr<char[]>
unique_ptr<char>
anrufendelete
, was falsch ist, da es mit erstellt wurdenew[]
?delete
genannt zu werden, wenn Sie brauchendelete[]
genannt. Dasunique_ptr<char>
setzt voraus, dass es einen Zeiger bekommt, der mit gelöscht wirddelete
.unique_ptr<char[]>
erwartet ein Array, dasdelete[]
korrekt gelöscht wird.Antworten:
Ich habe diesen Artikel im Eclipse-Forum gefunden, bin nur diesen Schritten gefolgt und er funktioniert für mich. Ich verwende Eclipse Indigo 20110615-0604 unter Windows mit einem 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__
in "Name" ein (stellen Sie sicher, dass zwei Unterstriche angehängt und vorangestellt werden), und lassen Sie "Wert" leer.Eine Beschreibung hierzu finden Sie jetzt auch in den Eclipse-FAQ: Eclipse-FAQ / C ++ 11-Funktionen .
Eclipse-Bildeinstellung
quelle
&&
.Anleitung für Eclipse CDT 4.4 Luna und 4.5 Mars
Konfigurieren Sie vor dem Erstellen eines Projekts zunächst den Eclipse-Syntaxparser:
Window
->Preferences
->C/C++
->Build
->Settings
->Discovery
->CDT GCC Build-in Compiler Settings
im Textfeld mit dem Titel
Command to get compiler specs
anhängen-std=c++11
Jetzt können Sie ein Projekt erstellen. Die Konfiguration hängt davon ab, welche Art von Projekt Sie erstellt haben:
Für Projekte, die erstellt wurden als: Datei -> Neu -> Projekt -> C / C ++ -> C ++ - Projekt
Klicken Sie mit der rechten Maustaste auf das erstellte Projekt und öffnen Sie es
Properties
->C/C++ Build
->Settings
->Tool Settings
->GCC C++ Compiler
->Dialect
Setzen Sie
-std=c++11
in Textfeld Titelother dialect flags
oder wählen SieISO C++11
aus derLanguage standard
Drop - Down.Für CMake-Projekt
Generieren Sie Eclipse-Projektdateien (in Ihrem Projekt)
Importieren Sie dann das generierte Verzeichnis als Standard-Eclipse-Projekt in Eclipse. Klicken Sie mit der rechten Maustaste auf Projekt und öffnen Sie es
Properties
->C/C++ General
->Preprocessor Include Paths, Marcos etc.
->Providers
aktivieren
CDT GCC Build-in Compiler Settings
und verschieben Sie es höher alsContributed PathEntry Containers
(Dies ist wichtig)Letzter gemeinsamer Schritt
Eclipse neu kompilieren, neu generieren
Project
->C/C++ Index
und neu starten.quelle
-std=c++11
sollteProject Properties -> C/C++ General -> Preprocessor Include Paths, Macros etc. -> Providers [tab] -> CDT GCC Built-in Compiler Settings -> Command used to get compiler specs:
. Fügen Sie Ihre-std=c++11
dazu hinzu. Ich hatte es in den globalen Arbeitsbereichseinstellungen als Vorschlag festgelegt, aber es wurde nicht an den oben beschriebenen Speicherort kopiert, als ich ein neuesMakefile
Projekt erstellte.Update 2016:
Ab gcc 6 ( Änderungen ) ist der Standard-C ++ - Dialekt C ++ 14. Das bedeutet, dass Sie mit Eclipse nichts mehr tun müssen, es sei denn, Sie benötigen ausdrücklich einen neueren oder älteren Dialekt als.
Für Luna und Mars
Dieser Community-Wiki-Bereich enthält die Antwort von Trismegistos.
1. Konfigurieren Sie vor dem Erstellen eines Projekts den Eclipse-Syntaxparser:
Fenster -> Einstellungen -> C / C ++ -> Erstellen -> Einstellungen -> Ermittlung -> CDT GCC-Einstellungen für den integrierten Compiler
im Textfeld mit dem Titel Befehl zum Abrufen der Compiler-Spezifikationen anhängen
-std=c++14
2. Projekt erstellen, die Konfiguration hängt davon ab, welche Art von Projekt Sie erstellt haben:Für Projekte, die erstellt wurden als: Datei -> Neu -> Projekt -> C / C ++ -> C ++ - Projekt
Klicken Sie mit der rechten Maustaste auf das erstellte Projekt und öffnen Sie es
Eigenschaften -> C / C ++ Build -> Einstellungen -> Werkzeugeinstellungen -> GCC C ++ Compiler -> Dialekt
Setzen Sie
-std=c++14
in die Textbox berechtigt , andere Dialekt Flaggen oder wählen Sie ISO C ++ 11 von der Sprache Standard Dropdown.Es gibt jetzt einen neuen Weg, dies ohne den GXX_EXPERIMENTAL-Hack zu lösen.
Für die neuesten Versionen : (Derzeit
Juno und KeplerLuna ):Unter neueren Versionen von Juno befinden sich die Einstellungen unter
Project properties -> C/C++ General -> Preprocessor Include Paths, Macros etc. -> tab Providers -> CDT GCC Builtin Compiler Settings ()
.Ältere Versionen 2012/2013:
Suchen Sie unter C / C ++ Build (in den Projekteinstellungen) den Präprozessor-Einschlusspfad und wechseln Sie zur Registerkarte Anbieter . Deaktivieren Sie alle außer den CDT GCC Builtin Compiler-Einstellungen. Deaktivieren Sie dann die Einträge für Freigabeeinstellungen…. Fügen Sie die Option -std = c ++ 11 zum Textfeld Command hinzu, um die Compilerspezifikationen abzurufen.
Gehen Sie zu Pfaden und Symbolen. Klicken Sie unter Symbole auf Standardeinstellungen wiederherstellen und dann anwenden.
Anmerkungen:
Eclipse ist wählerisch, wenn Sie auf "Anwenden" klicken. Sie müssen dies jedes Mal tun, wenn Sie eine Registerkarte "Einstellungen" verlassen.
[Eigenwerbung]: Ich habe meine eigenen detaillierteren Anweisungen basierend auf den oben genannten geschrieben. http://scrupulousabstractions.tumblr.com/post/36441490955/eclipse-mingw-builds
Vielen Dank an den Benutzer
Nobody
unter https://stackoverflow.com/a/13635080/1149664quelle
#ifndef __GXX_EXPERIMENTAL_CXX0X__
true zurückgegeben und der darunter liegende Code wird nicht analysiert. Wenn ich__GXX_EXPERIMENTAL_CXX0X__
Projektsymbole hinzufüge , wird das Array aufgelöst, aber die Referenzen meines Projekts werden durcheinander gebracht. Was könnte hier das Problem sein?Für die neueste (Juno) Eclipse-CD hat das Folgende für mich funktioniert, keine Notwendigkeit, sich
__GXX_EXPERIMENTAL_CXX0X__
selbst zu deklarieren . Dies funktioniert für den CDT-Indexer und als Parameter für den Compiler:"Ihr Projektname" -> Rechtsklick -> Eigenschaften:
C / C ++ Allgemein -> Präprozessor-Einschlusspfade, Makros usw. -> Wechseln Sie zur Registerkarte "Anbieter":
Wählen Sie für "Konfiguration" "Release" (und anschließend "Debug").
Schalten Sie alle Anbieter aus und wählen Sie einfach "CDT GCC Built-in Compiler Settings".
Deaktivieren Sie "Einstellungseinträge für Projekte freigeben (globaler Anbieter)".
im "Befehl zum Abrufen der Compilerspezifikationen:" add "-std = c ++ 11" ohne Anführungszeichen (funktioniert möglicherweise auch mit Anführungszeichen)
Klicken Sie auf Anwenden und schließen Sie die Optionen
Erstellen Sie den Index neu
Jetzt sollten alle C ++ 11-bezogenen Dinge vom Indexer korrekt aufgelöst werden.
win7 x64, neueste offizielle Eclipse mit cdt mingw -w64 gcc 4.7.2 aus dem mingwbuilds-Projekt auf sourceforge
quelle
Ich hatte das gleiche Problem mit meiner Eclipse Juno. Diese Schritte lösten das Problem:
Project -> Properties -> C/C++ General -> Path and Symbols -> Tab [Symbols]
.quelle
Für Eclipse CDT Kepler hat es mir geholfen,
std::thread
ungelöste Symbole loszuwerden :Gehen Sie zu Einstellungen-> C / C ++ -> Erstellen-> Einstellungen
Wählen Sie die Registerkarte Erkennung
Wählen Sie CDT GCC Built-in Compiler Settings [Shared]
Fügen Sie -std = c ++ 11 zum Feld "Befehl zum Abrufen der Compilerspezifikationen:" hinzu, z.
Das Hinzufügen
-std=c++11
vonProperties/C/C++ Build->Settings->Tool Settings->GCC C++ Compiler->Miscellaneous->Other
Flags zum Projekt reichte Kepler nicht, älteren Versionen wie Helios jedoch.quelle
Ich kann noch keinen Kommentar abgeben und schreibe meine eigene Antwort:
Es ist verwandt mit
__GXX_EXPERIMENTAL_CXX0X__
und gilt für Eclipse Juno und CDT 8.x.Einige Teile dieser Antwort werden bereits in anderen Antworten behandelt, aber ich möchte, dass sie kohärent ist.
Um das Erstellen mit stdc ++ 11 zu ermöglichen, muss ein spezifisches Flag für den Compiler hinzugefügt werden. Sie können dies über Projekteigenschaften tun. Projekteigenschaften ändern
RMB
undProject properties
oderALT + ENTER
. Dann C / C ++ Build -> Einstellungen -> Werkzeugeinstellungen -> GCC C ++ - Compiler -> Verschiedenes -> Andere Flags. Setzen Sie -std = c ++ 11 am Ende der Zeile, für GCC sieht es ungefähr so aus :-c -fmessage-length=0 -std=c++11
. Durch Hinzufügen von -stdc ++ 11 wird der Flag Compiler (GCC) deklariert__GXX_EXPERIMENTAL_CXX0X__
von selbst.An diesem Punkt können Sie ein Projekt mit der ganzen Güte von C ++ 11 erstellen.
Das Problem ist, dass Eclipse über einen eigenen Parser verfügt, der nach Fehlern sucht. Deshalb werden im Eclipse-Editor immer noch alle bösen Fehler angezeigt, während Sie gleichzeitig ein Projekt ohne Fehler erstellen und ausführen können. Es gibt eine Möglichkeit, dieses Problem zu lösen, indem das
__GXX_EXPERIMENTAL_CXX0X__
Flag für das Projekt explizit deklariert wird. Dies kann man tun (genau wie Carsten Greiner sagte): C / C ++ Allgemein -> Pfade und Symbole -> Symbole -> GNU C ++. Klicken Sie auf "Hinzufügen ..." und fügen Sie "__GXX_EXPERIMENTAL_CXX0X__
Unterstrich anhängen und vorangestellt" in "Name" ein und lassen Sie "Wert" leer. Und jetzt ist der zusätzliche Teil, den ich im Kommentar zur ersten Antwort behandeln wollte, gehen Sie zu: C / C ++ Allgemein -> Präprozessor-Einschlusspfad-Makros usw. -> Anbieter und AuswählenCDT Managed Build Setting Entries
Klicken Sie dann auf ANWENDEN und kehren Sie zur Registerkarte Einträge zurück. Unter GNU C ++ sollte jetzt CDT Managed Build Setting Entries vorhanden sein. Überprüfen Sie, ob im Inneren definiert ist,__GXX_EXPERIMENTAL_CXX0X__
ob es sich um -> ANWENDEN handelt, und erstellen Sie den Index neu. An diesem Punkt sollte alles in Ordnung sein.quelle
Ich hatte auch einige Probleme (Ubuntu 13.04 64-Bit, g ++ - 4.8, Eclipse Juno 3.8.1, CDT 6.0.0). Viele Dinge wurden oben erwähnt, es tut mir leid, diese zu wiederholen, aber zusätzlich hatte ich Probleme bei der Verwendung
als Teil von c ++ 11 (das Hinzufügen von -pthread für den Linker löst dieses Problem). Wie auch immer, endlich haben diese Einstellungen gut funktioniert:
Projekt -> Eigenschaften -> C / C ++ Build -> Einstellungen -> Verschiedenes. Ergänzen Sie die
Flag für die GCC- und G ++ - Compiler. Klicken Sie auf Übernehmen.
Für den Linker fügte dasselbe Fenster, Verschiedenes, Linker-Flags, das hinzu
Flagge. Einstellungen für freigegebene Bibliotheken, Name des freigegebenen Objekts, fügen Sie die hinzu
Flagge auch. Klicken Sie auf Übernehmen.
C / C ++ Allgemein -> Pfade und Symbole -> Symbole TAB, GNU C ++ ausgewählt, Hinzufügen der
(kein Wert)
Flagge. Klicken Sie auf Übernehmen.
C / C ++ Allgemein -> Präprozessor-Einschlusspfade .. -> Registerkarte Anbieter: Aktivieren
Integrierte CDT GCC-Compilereinstellungen
und für "Befehl zum Abrufen der Compilerspezifikationen" fügen Sie das hinzu
Flagge. Deaktivieren Sie Freigeben. Klicken Sie auf Übernehmen.
CDT verwaltet Build-Einstellungseinträge. Überprüfen Sie dies ebenfalls. Deaktivieren Sie die beiden anderen. Klicken Sie auf Übernehmen.
Wenn Sie zur Registerkarte "Einträge" zurückkehren und GNU C ++ CDT die Einträge für Build-Einstellungen verwaltet, sollten Sie nun Ihre hinzugefügten Einträge sehen
Eintrag.
Das ist es. Beim Codieren tippen
kann jetzt die Thread-Klasse jetzt automatisch vervollständigen, Builds sollten gut funktionieren und es sollte keine geben
zur Laufzeit.
quelle
Project -> Properties -> C/C++ Build -> Settings -> Miscellaneous
Schritt, der für mich funktioniert hat. Vielen Dank: DIch weiß nicht, ob es nur ich ist. Die Lösung mit dem höchsten Rang funktioniert bei mir nicht. Meine Eclipse-Version ist eine normale Eclipse-Plattform, die mithilfe von sudo apt-get install eclipse in Ubuntu installiert wurde. Ich habe jedoch eine Lösung gefunden, die die Methode gemeinsam übernimmt Sowohl von der Lösung mit dem höchsten Rang als auch von der zweiten Lösung wird im Folgenden beschrieben, was ich getan habe, damit es funktioniert (Beachten Sie, dass die anderen Schritte wie das Erstellen eines C ++ - Projekts usw. der Einfachheit halber ignoriert werden).
Sobald Sie das C ++ - Projekt erstellt haben
(1) C / C ++ Allgemein -> Pfade und Symbole -> Symbole -> GNU C ++. Klicken Sie auf "Hinzufügen ..." und fügen Sie GXX_EXPERIMENTAL_CXX0X (stellen Sie sicher, dass zwei Unterstriche angehängt und vorangestellt werden ) in "Name" ein und lassen Sie "Wert" leer.
(2) Suchen Sie unter C / C ++ Build (in den Projekteinstellungen) den Präprozessor-Einschlusspfad und wechseln Sie zur Registerkarte Anbieter. Deaktivieren Sie alle außer den CDT GCC Builtin Compiler-Einstellungen. Deaktivieren Sie dann die Einträge für Freigabeeinstellungen…. Fügen Sie die Option -std = c ++ 11 zum Textfeld Command hinzu, um die Compilerspezifikationen abzurufen
Nachdem die obigen Schritte 2 und 2 ausgeführt wurden, funktioniert es. Die Eclipse kann das unique_ptr auflösen. Ich weiß nicht, warum diese Lösung funktioniert. Ich hoffe, dass sie Menschen helfen kann.
quelle
Eclipse C / C ++ erkennt das Symbol nicht
std::unique_ptr
, obwohl Sie den C ++ 11-Speicherheader in Ihre Datei aufgenommen haben.Angenommen, Sie verwenden den GNU C ++ - Compiler, habe ich Folgendes getan, um Folgendes zu beheben:
Projekt -> Eigenschaften -> C / C ++ Allgemein -> Präprozessor-Einschlusspfade -> GNU C ++ -> CDT-Benutzereinstellungseinträge
Klicken Sie auf die Schaltfläche "Hinzufügen ..."
Wählen Sie "Präprozessor-Makro" aus dem Dropdown-Menü
Klicken Sie auf Übernehmen und dann auf OK, um zu Ihrem Projekt zurückzukehren
Erstellen Sie dann Ihren C ++ - Index neu: Projekte -> C / C ++ - Index -> Neu erstellen
quelle
Für mich auf Eclipse Neon folgte ich Trismegistos Antwort hier oben , NOCH habe ich noch einen zusätzlichen Schritt hinzugefügt:
Klicken Sie auf Übernehmen und auf OK.
Prost,
Kerl.
quelle
quelle
Weder der Hack noch die Cleaner-Version funktionieren für Indigo. Der Hack wird ignoriert und die erforderlichen Konfigurationsoptionen fehlen. Ohne ersichtlichen Grund begann der Build zu arbeiten, nachdem er nicht funktioniert hatte und keinen nützlichen Grund dafür lieferte. Zumindest über die Kommandozeile erhalte ich reproduzierbare Ergebnisse.
quelle
Führen Sie die folgenden Schritte aus, um Unterstützung für C ++ 14 in Eclipse Luna zu erhalten:
C++ General -> Preprocessor Include -> Providers -> CDT Cross GCC Built-in Compiler Settings
, fügen Sie "-std = c ++ 14"C++ Build -> Settings -> Cross G++ Compiler -> Miscellaneous
, fügen Sie "-std = c ++ 14"Indizieren Sie Ihr Projekt neu und starten Sie Eclipse schließlich neu. Es sollte wie erwartet funktionieren.
quelle
Ich habe es so auf einem Mac gelöst. Ich habe Homebrew verwendet, um die neueste Version von gcc / g ++ zu installieren. Sie landen in / usr / local / bin mit Includes in / usr / local / include.
Ich habe eine CD in / usr / local / bin geschrieben und einen Symlink von g ++ @ 7 erstellt, was auch immer nur für g ++ ist, da dieses @ Bit nervt.
Dann ging ich zu MyProject -> Eigenschaften -> C / C ++ Build -> Einstellungen -> GCC C ++ Compiler und änderte den Befehl von "g ++" in "/ usr / local / bin / g ++". Wenn Sie sich entscheiden, den symbolischen Link nicht zu erstellen, können Sie genauer sein.
Machen Sie dasselbe für den Linker.
Übernehmen und anwenden und schließen. Lassen Sie es den Index neu erstellen. Für eine Weile zeigte es eine gewaltige Anzahl von Fehlern, aber ich denke, das war beim Erstellen von Indizes. Während ich die Fehler herausfand, verschwanden sie alle ohne weitere Maßnahmen.
Ich denke, ohne zu überprüfen, ob Sie auch in Eclipse -> Eigenschaften -> C / C ++ -> Core Build Toolchains gehen und diese mit unterschiedlichen Pfaden bearbeiten können, aber ich bin mir nicht sicher, was das bewirken wird.
quelle
Ich hatte ein ähnliches Problem mit Eclipse C ++ 2019-03 für ein gemischtes C- und C ++ - Projekt, das std :: optional und std :: swap verwendete. Was für mich funktioniert hat, war dies. Entfernen Sie im Projekt Eigenschaften-> C / C ++ Build-> Einstellungen-> Werkzeugeinstellungen-> Cross G ++ Compiler -std = gnu ++ 17 aus Verschiedenes und fügen Sie es stattdessen in Dialekt-> Andere Dialektflags ein.
quelle
Wenn ich einen Cross-Compiler verwende, bekomme ich oft fortschrittliche benutzerdefinierte Build-Systeme, die von Kollegen sorgfältig erstellt wurden. Ich verwende "Makefile-Projekt mit vorhandenem Code", sodass die meisten anderen Antworten nicht zutreffen.
Zu Beginn des Projekts muss ich angeben, dass ich im Assistenten für "Makefile-Projekt mit vorhandenem Code" einen Cross-Compiler verwende. Das Ärgerliche ist, dass in den letzten 10 Jahren die Cross-Compiler-Schaltfläche in diesem Assistenten nicht auffordert, wo sich der Cross-Compiler befindet. In einem Schritt, der das C ++ - Problem und das Cross-Compiler-Problem behebt, muss ich zur Registerkarte "Anbieter" wechseln, wie in Antworten wie @ravwojdyla oben erwähnt. Der Anbieter, den ich auswählen muss, ist jedoch der Cross-Compiler-Anbieter. Dann gebe ich im Befehlsfeld den vollständigen Pfad zum Compiler ein und füge -std = gnu ++ 11 für den C ++ - Standard hinzu, für den ich Unterstützung haben möchte. Dies funktioniert so gut wie erwartet.
Sie können dies für ein vorhandenes Projekt tun. Möglicherweise müssen Sie nur den Indexer erneut ausführen.
Ich musste nie das experimentelle Flag hinzufügen oder die Definition von __cplusplus überschreiben. Das einzige ist, wenn ich eine beträchtliche Menge an modernem C-Code habe, kann ich die C-spezifische Standardoption nirgends einsetzen.
Und wenn die Dinge wirklich schlecht laufen, kann das Abrufen eines Parser-Protokolls mit diesem Befehl im Untermenü Indexer sehr informativ sein.
quelle