it-swarm.com.de

Der Eclipse CDT-Indexer kennt keine C++ 11-Container

Ich habe ein C++ 11-Projekt in Eclipse CDT für die Verwendung von gcc-4.7 konfiguriert. Es ist nicht der Standard-Compiler auf meinem System, der C++ 11 nicht unterstützt. Damit die Kompilierung funktionieren kann, muss ich das Flag -std=c++11 übergeben und auch den folgenden Header-Pfad enthalten: /usr/local/Cellar/gcc/4.7.2/gcc/include/c++/4.7.2 

Wenn ich C++ 11-Containertypen wie std::unordered_set oder std::unordered_map verwende, beschwert sich der CDT-Indexer: Symbol unordered_set could not be resolved. Wie kann ich den Indexer anweisen, diese Symbole richtig aufzulösen?

So habe ich meinen Indexer konfiguriert:

enter image description here

Soweit ich die Einstellungen verstehe, soll der Indexer die Compilereinstellungen der aktuell aktiven Build-Konfiguration verwenden. Kompilierung funktioniert gut, warum auch nicht indizieren?

44
clstaudt

Wie in diesem Forum beschrieben:

http://www.Eclipse.org/forums/index.php/mv/msg/282618/

  • klicken Sie mit der rechten Maustaste auf das Projekt und gehen Sie zu "Eigenschaften". C/C++ Allgemein -> Pfade und Symbole -> Symbole -> GNU C++.
  • Klicken Sie auf "Hinzufügen ..." und fügen Sie __GXX_EXPERIMENTAL_CXX0X__ in "Name" und .__ ein. Lassen Sie "Value" leer. Klicken Sie auf Anwenden, tun Sie, was immer Sie tun möchten, und klicken Sie dann auf OK.
35
user2485710

Das Einrichten von **__GXX_EXPERIMENTAL_CXX0X__** hilft in meinem Fall nicht (Juli 2014, Eclipse Kepler 20130919, Ubuntu 12.04).

Um die Hervorhebung der C++ 11-Syntax zu korrigieren, gehen Sie zu:

Projekteigenschaften -> C/C++ - Allgemein -> Pfade und Symbole -> Symbole -> GNU C++

und überschreiben Sie das Symbol (d. h. neues Symbol hinzufügen):

__cplusplus

mit Wert

201103L

AKTUALISIERT: Wenn Sie eine neuere Version von Eclispe (Stand 2016) verwenden und immer noch dasselbe Problem haben, versuchen Sie value (wie von jose.diego angegeben):

201402L

Stellen Sie sicher, dass der Indexer in den Projekteinstellungen aktiviert ist ( C/C++ - Allgemein -> Indexer ).

Dann neu indizieren ( Projekt -> C/C++ - Index -> Neuaufbau )

wenn das Problem weiterhin bestehen bleibt, erneut indexieren. Es sollte jetzt klappen.

80
selyunin

Ich habe dieses Problem vor kurzem gelöst, nachdem ich etwas Glück gehabt hatte.

Klicke auf dein Projekt und rechtsklicke-> Eigenschaften

Wählen Sie "C/C++ General -> Processor Include Paths, Macros etc ..."

Wählen Sie die Registerkarte "Anbieter" aus

Auswahl aufheben alles außer "CDT-Benutzereinstellungen" und "CDT GCC Built-in Compiler-Einstellungen"

Klicken Sie auf "CDT GCC Built-in Compiler Settings"

Auswahl aufheben "Globalen Anbieter für Projekte verwenden"

Bearbeiten Die Box am unteren Rand mit der Bezeichnung "Befehl zum Abrufen von Compilerspezifikationen".

Füge in den Befehl -std = c ++ 11 ein, so dass es ungefähr so ​​aussieht:

${COMMAND} -std=c++11 -E -P -v -dD "${INPUTS}"

Klicken Sie auf Übernehmen und OK.

enter image description here

Das hat bei mir funktioniert. Sie müssen das Projekt wahrscheinlich neu indizieren.

48
Galik

Oder gehen Sie zu:

  • C/C++ Build-> Ermittlungsoptionen-> GCC C++ Compiler

  • fügen Sie Ihre Flags zu den Argumenten des Compiler-Aufrufs hinzu. wie -std = c ++ 11 -m32

  • Entdeckte Einträge jetzt löschen: Klicken Sie auf Löschen

  • das Projekt neu aufbauen

Danach werden ALLE Symbole mit korrekten Werten aktualisiert und der Indexer sollte wie vorgesehen funktionieren

9
user1283078

Für einen Workaround mit einem Projekt, das einen externen Builder verwendet, wurde das Symbol definiert:

__cplusplus

mit dem Wert:

201403

im Projekt: Pfade und Symbole -> Symbole/GNU C++.

Dies funktionierte in Eclipse Kepler CDT Version 8.3.0.201402142303.

6
Afilu

Siehe diesen Leitfaden :

  1. C/C++ Build-> Einstellungen-> GCC C++ Compiler-> Dialect
  2. Wählen Sie "ISO C++ 11 (-std = C++ 0x)" in "Sprachstandard" Language and dialect
  3. Übernehmen und OK
  4. Erneuere das Projekt und es funktioniert :)
2
Yojiaku

Folgendes funktioniert in EclipseC/C++Oxygen. 2 mit gcc-5.5.0

Eclipse Properties->C/C++ Build->Settings->GCC C++ Compiler->Dialect->Other dialect flags: -std=c++17

Nehmen Sie nichts in der Dropdown-Liste Language standard auf.

1
caot

Die folgende Konfiguration hilft mir, das in der ursprünglichen Frage angegebene Problem zu beheben.

Umgebung: Eclipse (Release Oxygen.3a (4.7.3a)), Cygwin64 ..__ Falls Sie eine andere Version von Cygwin verwenden, können Sie ähnliche Verzeichnisse wie folgt finden.

Schritt 1: Stellen Sie sicher, dass Sie über die folgenden zwei Verzeichnisse verfügen:

   C:\cygwin64\lib\gcc\x86_64-pc-cygwin\7.4.0\include
   C:\cygwin64\lib\gcc\x86_64-pc-cygwin\7.4.0\include\c++

Wenn Sie die beiden oben genannten Verzeichnisse nicht sehen, starten Sie Ihr Cygwin-Setup-Programm und installieren Sie gcc-core, gcc-g ++ und libgcc1.

Schritt 2: Kopieren Sie das Verzeichnis C:\cygwin64\lib\gcc\x86_64-pc-cygwin\7.4.0\include in C:\cygwin64\usr, wenn Sie nicht über zwei Include-Verzeichnisse sehen.

Schritt 3: Gehen Sie zu Projekteigenschaften-> C/C++ - Allgemein-> Pfade und Symbole Stellen Sie sicher, dass die folgenden beiden Pfade aufgeführt sind

   C:\cygwin64\usr\include
   C:\cygwin64\usr\include\c++

Schritt 4: Eigenschaften-> C/C++ Build/Einstellungen/Cygwin PE Parser auswählen

Schritt 5: Eigenschaften-> C/C++ - Build/Tool Chain-Editor Wählen Sie Cygwin GCC

Schritt 6: Property-> C/C++ General/Indexer Wählen Sie Indexer aktivieren

Schritt 7: Projekt-> C/C++ - Index-> ​​Neu erstellen

Jetzt sollte Ihr Eclipse die C++ 11-Typen sehen können.

0
q0987