web-dev-qa-db-fra.com

Eclipse CDT: le symbole 'cout' n'a pas pu être résolu

L'erreur est comme ci-dessus. J'ai ce que devraient être tous les fichiers nécessaires inclus dans le projet Eclipse:

/usr/include/c++/4.6
/usr/include
/usr/include/linux
/usr/local/include

etc. 

J'ai essayé std::cout et using namespace std;cout mais le message dit toujours non résolu. 

J'ai importé iostream et cstdlib.

De plus, je suis sur Ubuntu 12.04 avec Eclipse 3.7.2.

Extrait de code:

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include "XPLMDisplay.h"
#include "XPLMGraphics.h"

int XPluginStart(char * outName,  char * outSig,  char * outDesc) {
    /* ... */
    std::cout << "test" << std::endl;
    /* ... */
}

using namespace std;


UPDATE: J'ai créé le projet Eclipse à partir de code existant. La création d'un nouveau projet c ++ le corrige. J'accepterai une réponse qui explique quelle configuration dans le projet existant peut être la cause (pour éviter de copier/coller tous mes projets).

57
Jeff

Il est fort probable que certains paramètres d’inclusion spécifiques au système manquent dans vos paramètres, ce qui empêche l’indexeur d’analyser correctement iostream, et donc les erreurs. Si vous sélectionnez Index -> Search For Unresolved Includes dans le menu contextuel du projet, vous obtiendrez la liste des inclusions non résolues que vous pouvez rechercher dans /usr/include et ajouter des répertoires contenant à C++ Include Paths and Symbols dans les propriétés du projet.

Sur mon système, j'ai dû ajouter /usr/include/c++/4.6/x86_64-linux-gnu pour bits/c++config.h à résoudre et quelques répertoires supplémentaires.

N'oubliez pas de reconstruire l'index (Index -> Reconstruire) après avoir ajouté les répertoires d'inclusion.

92
vitaut

Pour vous débarrasser des avertissements de symboles que vous ne voulez pas, vous devez d'abord comprendre comment Eclipse CDT affiche normalement des avertissements de symboles inconnus. C'est son processus, plus ou moins:

  1. Eclipse détecte les chaînes d'outils GCC disponibles sur le système
  2. Votre projet Eclipse est configuré pour utiliser une chaîne d’outils particulière.
  3. Eclipse effectue une découverte sur la chaîne d’outils pour trouver ses chemins d’inclusion et ses définitions intégrées, c’est-à-dire en l’exécutant avec les options appropriées et en lisant le résultat.
  4. Eclipse lit les fichiers d'en-tête à partir des chemins d'inclusion
  5. Eclipse indexe le code source de votre projet
  6. Eclipse affiche des avertissements concernant les symboles non résolus dans l'éditeur

Il serait peut-être préférable à long terme de résoudre les problèmes des étapes précédentes plutôt que de remplacer leurs résultats en ajoutant manuellement des répertoires d'inclusion, des symboles, etc.

Chaînes d'outils

Si GCC est installé et détecté par Eclipse, il doit répertorier GCC comme un choix de chaîne d'outils qu'un nouveau projet C++ pourrait utiliser, ce qui apparaîtra également dans Window -> Preferences -> C/C++ -> New CDT Project Wizard dans la zone Toolchains de l'onglet Preferred Toolchains, à droite. S'il ne s'affiche pas, consultez la réponse de la FAQ de CDT sur les compilateurs nécessitant des environnements spéciaux (ainsi que MinGW et Cygwin answers pour le folk Windows.)

Si vous avez un projet Eclipse C++ existant, vous pouvez modifier la chaîne d'outils associée en ouvrant les propriétés du projet, en allant à C/C++ Build -> Tool Chain Editor et en choisissant la chaîne d'outils souhaitée dans la liste déroulante Current toolchain:. (Vous devrez d'abord décocher la case Display compatible toolchains only si la chaîne d'outils souhaitée est suffisamment différente de celle précédemment définie dans le projet.)

Si vous avez ajouté une chaîne d’outils au système après le lancement d’Eclipse, vous devrez la redémarrer pour qu’elle détecte la chaîne d’outils.

Découverte

Ensuite, si le C/C++ Build -> Discovery Options -> Discovery profiles scope du projet est défini sur Per Language, lors de la prochaine construction, la nouvelle chaîne d'outils associée au projet sera utilisée pour la découverte automatique des chemins d'accès et des symboles, et pour mettre à jour les chemins et symboles "intégrés" qui apparaissent dans le C/C++ General -> Paths and Symbols du projet dans les onglets Includes et Symbols.

Indexation

Parfois, vous devez réindexer après avoir défini la chaîne d'outils et effectué une construction pour que les anciens avertissements de symbole disparaissent; Faites un clic droit sur le dossier du projet et allez à Index -> Rebuild pour le faire.

(testé avec Eclipse 3.7.2/CDT 8)

19
rakslice

Merci beaucoup pour les réponses ci-dessus. J'ajoute une réponse pour un cas d'utilisation spécifique ...

Sur un projet avec deux architectures cibles, chacune avec sa propre configuration (la cible principale est une plate-forme AVR intégrée; la deuxième cible est mon PC Linux local pour l'exécution de tests unitaires). Il est donc nécessaire de définir Preferences -> C/C++ -> Indexer -> Use active build configuration, ainsi que d'ajouter /usr/include/c++/4.7, /usr/include et /usr/include/c++/4.7/x86_64-linux-gnu à Project Properties -> C/C++ General -> Paths and Symbols, puis pour reconstruire l'index.

16
Jack Kelly

J'ai d'abord essayé la solution marquée ici. Cela a fonctionné mais c’est gentil, et vous devez le refaire chaque fois que vous mettez à jour le gcc. J'ai finalement trouvé une meilleure solution en procédant comme suit:

  1. Project -> Properties -> C/C++ General -> Preprocessor Include Paths, Macros, etc.
  2. Providers -> CDT GCC built-in compiler settings
  3. Décochez Use global provider shared between projects (vous pouvez également modifier le fournisseur global s'il répond à vos besoins)
  4. Dans Command to get compiler specs, ajoutez -std=c++11 à la fin
  5. Index-> Rebuild

Voilà, facile et simple. Espérons que cela aide.

Note: je suis sur Kepler. Je ne suis pas sûr si cela fonctionne sur Eclipse plus tôt.

8
Andy Shiue

J'ai eu un problème similaire avec * std :: shared_ptr * avec Eclipse avec MinGW et gcc 4.8.1. Quoi qu'il en soit, Eclipse ne résoudrait pas * shared_ptr *. Pour résoudre ce problème, j'ai ajouté manuellement la macro __cplusplus aux symboles C++ et à l'alto! - Eclipse peut le trouver. Puisque j'ai spécifié -std = c ++ 11 en tant qu'option de compilation, j'ai supposé que l'analyseur de code Eclipse utiliserait également cette option. Donc, pour résoudre ce problème:

  1. Contexte du projet -> Général C/C++ -> Chemins et symboles -> Onglet Symboles
  2. Sélectionnez C++ dans le panneau Langues.
  3. Ajoutez le symbole __cplusplus avec une valeur de 201103 .

Le seul problème avec cela est que gcc se plaindra que le symbole est déjà défini (!) Mais que la compilation se termine comme avant.

4
codefool

J'utilise Ubuntu 12.04/Eclipse 4.2.1/CDT 8.1.1 et le même problème se posait depuis un certain temps: importer un projet C++ à partir de SVN provoquerait ces ennuyeuses erreurs "Inclusion non résolue" et je devrais plutôt créer un nouveau projet et copiez-y les fichiers en tant que solution de contournement (encore partielle, car la fonctionnalité SVN n’y serait pas!).

Enfin, je viens de trouver une solution simple et satisfaisante:

  • Allez à Project -> Properties -> C/C++ General -> Preprocessor Include Paths, Macros etc. -> Providers et cochez Enable language settings providers for this project.

  • Redémarrez Eclipse.

J'espère que cela fait déjà l'affaire.

4
user1995696

Je supprime simplement toutes les erreurs dans la liste des problèmes . Fermez ensuite le projet .__ et rouvrez-le Projet propre build allrun

alors ces erreurs stupides vont. 

1
vivi

J'ai eu le même problème en utilisant Eclipse CDT (Kepler) sur Windows avec Cygwin installé. Après avoir indiqué les propriétés du projet à chaque Cygwin que je pouvais imaginer, il ne pouvait toujours pas trouver cout

La dernière pièce manquante s’est avérée être C:cygwin64\lib\gcc\x86_64-pc-cygwin\4.8.2\install-tool\include.

Pour résumer:

  • Clic droit sur le projet
  • Choisissez Properties
  • Accédez à l'onglet C/C++ General> Paths and Symbols> Includes
  • Cliquez sur Add...
  • Cliquez sur File system...
  • Accédez à l'emplacement de votre Cygwin lib\gcc\x86_64-pc-cygwin\4.8.2\install-tool\include
  • Cliquez sur OK

Voici à quoi ressemble mon projet lorsque tout a été dit et fait: enter image description here

1
user1205577

Pour moi, il a été utile d'activer la découverte automatique dans Propriétés -> C/C++ - Construire -> Options de découverte pour résoudre ce problème.

1
WaTho

J'ai créé le projet Makefile en utilisant cmake sur Ubuntu 16.04.

Une fois créé le projet Eclipse pour les Makefiles générés par cmake, j'ai créé le nouveau projet comme suit:

Fichier -> nouveau -> Projet Makefile avec le code existant.

Ce n’est que quelques fois que j’ai fait que j’ai remarqué que le paramètre par défaut de la "Chaîne d’outils pour les paramètres de l’indexeur" était Aucun . Dans mon cas, je l’ai changé pour Linux GCC et toutes les erreurs ont disparu. 

J'espère que cela aide et laissez-moi savoir si ce n'est pas une solution légitime.

À votre santé,

Gars. 

1
Guy Avraham

Si tout échoue, comme cela a été le cas dans mon cas, désactivez simplement les annotations. J'ai démarré un projet c ++ 11 avec son propre makefile mais je ne pouvais pas résoudre tous les problèmes. Même si vous désactivez les annotations, Eclipse sera toujours en mesure de vous aider à effectuer certaines complétions automatiques. Plus important encore, le débogueur fonctionne toujours!

1
ormurin

Vous regardez sous la mauvaise section… .. J'ai compris la différence lorsque j'ai installé Linux après une frustration récente vis-à-vis de Windows et que la différence était immédiatement apparente.

Dans la nouvelle configuration, j'ai un dossier includes dans une projection que j'ai créée à partir d'une source existante. Je peux développer cela et voir une tonne d'inclus; Cependant, je ne peux rien y ajouter… .. Cela m'amène à rechercher les endroits où ces fichiers étaient répertoriés.

Ils sont répertoriés sous Propriétés du projet> Général C/C++> Inclusions du préprocesseur> GNU C++ CDT GCC Paramètres du compilateur intégré [Shared] Sous cette valeur, il y a une tonne d'inclusions.

Ces paramètres sont définis par la chaîne d'outils que vous avez sélectionnée.

1
Bluebaron

C'est ce qui s'est passé après la mise à jour de gcc et Eclipse sur ArchLinux. Ce qui a résolu le problème pour moi, c’est Project -> C/C++ Index -> Rebuild.

0
DBedrenko

J'ajoute juste un autre conseil après avoir essayé moi-même un tas de trucs et que ça ne marche pas ...

J'avais installé GCC et le chemin d'accès à la commande includes correctement. Avait aussi l'erreur std, et ne pouvait rien faire fonctionner pour cout (et je soupçonne quoi que ce soit dans la SL ...)

Il m'a fallu un moment pour réaliser que g ++ n'était pas installé - gcc l'était mais pas g ++. Alors faites juste:

Sudo apt-get install g ++

Redémarrez Eclipse. En supposant que les détails mentionnés ci-dessus à propos de gcc et des chemins à inclure soient corrects, tout devrait bien se passer maintenant ...

0
Francky_V

le mien était un peu facile à comprendre clic droit> exécuter en tant que> configuration d'exécution

cases à cocher inclure la bibliothèque système, secteur hérité

0
Sanjay