web-dev-qa-db-fra.com

L'indexeur Eclipse CDT ne connaît pas les conteneurs C++ 11

J'ai configuré un projet C++ 11 dans Eclipse CDT pour utiliser gcc-4.7. Ce n'est pas le compilateur par défaut sur mon système, qui ne supporte pas C++ 11. Pour que la compilation fonctionne, je dois passer l'indicateur -std=c++11 et inclure également le chemin d'en-tête suivant: /usr/local/Cellar/gcc/4.7.2/gcc/include/c++/4.7.2 

Chaque fois que j'utilise des types de conteneur C++ 11 tels que std::unordered_set ou std::unordered_map, l'indexeur CDT se plaint: Symbol unordered_set could not be resolved. Comment puis-je dire à l'indexeur de résoudre ces symboles correctement?

Voici comment j'ai configuré mon indexeur:

enter image description here

Autant que je sache les paramètres, l'indexeur est censé utiliser les paramètres du compilateur de la configuration de construction actuellement active. La compilation fonctionne bien, alors pourquoi l’indexation non plus?

44
clstaudt

Comme décrit dans ce post sur le forum:

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

  • cliquez avec le bouton droit sur le projet et allez dans "Propriétés" C/C++ Général -> Chemins et symboles -> Symboles -> GNU C++.
  • Cliquez sur "Ajouter ..." et collez __GXX_EXPERIMENTAL_CXX0X__ dans "Nom" et Laissez "Valeur" vide. Cliquez sur Appliquer, faites ce que vous avez demandé, puis cliquez sur OK.
35
user2485710

La configuration de **__GXX_EXPERIMENTAL_CXX0X__** ne m'aide pas dans mon cas (juillet 2014, Eclipse Kepler 20130919, Ubuntu 12.04).

Pour corriger la coloration syntaxique C++ 11, allez à:

Propriétés du projet -> C/C++ Général -> Chemins et symboles -> Symboles -> GNU C++

et écrasez le symbole (c’est-à-dire ajoutez un nouveau symbole):

__cplusplus

avec valeur

201103L

MISE À JOUR: Si vous utilisez une version plus récente d'Eclispe (à partir de 2016) et que vous rencontrez toujours le même problème, essayez value (comme indiqué par jose.diego):

201402L

Assurez-vous que l'indexeur est activé dans les paramètres du projet ( Général C/C++ -> Indexeur )

Puis réindexez ( Projet -> Index C/C++ -> Reconstruire )

si le problème persiste, réindexez à nouveau. Cela devrait fonctionner maintenant.

80
selyunin

J'ai récemment résolu ce problème après avoir eu la chance de googler.

Cliquez sur votre projet et faites un clic droit-> Propriétés

Sélectionnez "C/C++ Général -> Chemins d'inclusion de processeurs, macros, etc."

Sélectionnez l'onglet "Fournisseurs"

Désélectionnez tout sauf "Entrées des paramètres utilisateur CDT" et "Paramètres du compilateur intégré CDT GCC"

Cliquez sur "Paramètres du compilateur intégré CDT GCC"

Désélectionnez "Utiliser le fournisseur global partagé entre les projets"

Edit la case en bas intitulée "Commande pour obtenir les spécifications du compilateur"

Insère dans la commande -std = c ++ 11 pour ressembler à ceci:

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

Cliquez sur Appliquer et d'accord.

enter image description here

Cela a fonctionné pour moi. Vous devrez probablement réindexer le projet.

48
Galik

Ou aller à:

  • C/C++ Build-> Options de découverte-> Compilateur GCC C++

  • ajoutez vos drapeaux aux arguments d'appel du compilateur. comme -std = c ++ 11 -m32

  • Effacer les entrées découvertes maintenant: cliquez sur Effacer

  • reconstruire le projet

Après cela, TOUS les symboles seront mis à jour avec les valeurs correctes et l'indexeur devrait fonctionner comme prévu.

9
user1283078

La solution de rechange pour moi, avec un projet utilisant un générateur externe, consistait à définir le symbole:

__cplusplus

avec la valeur:

201403

dans le projet: Chemins et symboles -> Symboles/GNU C++.

Cela a fonctionné dans Eclipse Kepler CDT Version: 8.3.0.201402142303.

6
Afilu

Voir ce guide :

  1. C/C++ Build-> Paramètres-> Compilateur GCC C++-> Dialecte
  2. Choisissez "ISO C++ 11 (-std = c ++ 0x)" dans "langage standard" Language and dialect
  3. Appliquer et OK
  4. Reconstruisez le projet et ça marche :)
2
Yojiaku

Ce qui suit fonctionne dans EclipseC/C++Oxygen. 2 avec gcc-5.5.0

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

Ne rien ramasser dans la liste déroulante Language standard.

1
caot

La configuration suivante m'aide à résoudre le problème indiqué dans la question d'origine.

Environnement: Eclipse (version Oxygen.3a (4.7.3a)), Cygwin64 . Si vous avez une version différente de Cygwin, vous pouvez trouver des répertoires similaires comme suit.

Étape 1: Assurez-vous de disposer des deux répertoires suivants:

   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++

Si vous ne voyez pas les deux répertoires ci-dessus, lancez votre programme d'installation Cygwin et installez gcc-core, gcc-g ++ et libgcc1.

Étape 2: Copiez le répertoire C:\cygwin64\lib\gcc\x86_64-pc-cygwin\7.4.0\include dans C:\cygwin64\usr si vous ne voyez pas les deux répertoires d'inclusion ci-dessus.

Étape 3: Accédez à Propriété du projet-> C/C++ Général-> Chemins et symboles Assurez-vous que les deux chemins suivants sont répertoriés.

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

Étape 4: Propriété-> C/C++ Construire/Paramètres/Choisir l'analyseur Cygwin PE

Étape 5: Propriété -> Editeur de chaîne d'outils/de construction C/C++ Choisissez Cygwin GCC

Étape 6: Propriété -> Général C/C++/Indexeur Choisissez Activer l'indexeur

Étape 7: Projet-> Index C/C++-> Reconstruire

Maintenant, votre Eclipse devrait pouvoir voir les types C++ 11.

0
q0987