64 votes

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

L'erreur est la même que ci-dessus. J'ai ce qui devrait ê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 y using namespace std; cout mais ça dit toujours non résolu.

J'ai importé iostream y cstdlib .

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

Extraits 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;
    /* ... */
}

en utilisant l'espace de noms std ;


UPDATE : J'avais créé le projet eclipse à partir d'un code existant. La création d'un nouveau projet c++ corrige le problème. J'accepterai une réponse qui explique quel paramètre dans le projet existant pourrait causer ceci (ainsi je n'ai pas à couper et coller tous mes projets).

0 votes

Avez-vous importé iostream ?

0 votes

Riight, quand on parle d'" importer " iostream, j'espère que vous faites en fait " #include <iostream> " puisque la notion d'importation de choses n'est pas tout à fait correcte en C++.

0 votes

@hmjd Je ne peux pas poster tout le code, mais un peu plus ne devrait pas faire de différence.

97voto

vitaut Points 10255

Il est probable qu'il manque des répertoires d'inclusion spécifiques au système dans vos paramètres, ce qui empêche l'indexeur d'analyser correctement iostream, d'où les erreurs. Sélection de Index -> Search For Unresolved Includes dans le menu contextuel du projet vous donnera la liste des inclusions non résolues que vous pouvez chercher dans /usr/include et ajoutez les répertoires qui les contiennent à 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 para bits/c++config.h à résoudre et quelques autres répertoires.

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

1 votes

Solution parfaite, bravo. j'ai résolu mon problème avec les messages d'erreur locaux concernant les méthodes et classes mysql en c++ sur adt+eclipse juno bundle avec cdt ajouté (ubuntu 12.04). upvote, bien sûr !

0 votes

Pour moi, Ubuntu 10.04, il faut ajouter /usr/include/c++/4.4/i486-linux-gnu

1 votes

J'ai dû ajouter include_directories("/usr/include/x86_64-linux-gnu") à mon fichier cmake, puis le projet eclipse généré est capable de parser vector, cout, string, et tous les autres composants présents de la bibliothèque STL C++. Pour ceux qui ont besoin de plus d'informations sur la configuration de projets Eclipse CDT à partir de fichiers CMake, consultez ce post : stackoverflow.com/questions/9453851/

24voto

rakslice Points 1939

Pour vous débarrasser des avertissements de symbole que vous ne voulez pas, vous devez d'abord comprendre comment Eclipse CDT génère normalement des avertissements de symbole inconnu en premier lieu. Voici plus ou moins son processus :

  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 fait une recherche 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 la sortie.
  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 sur les symboles non résolus dans l'éditeur.

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

Chaînes d'outils

Si vous avez installé GCC, et qu'Eclipse l'a détecté, il devrait l'inscrire comme choix de chaîne d'outils qu'un nouveau projet C++ pourrait utiliser, ce qui apparaîtra également dans le tableau suivant Window -> Preferences -> C/C++ -> New CDT Project Wizard sur le Preferred Toolchains de l'onglet Toolchains sur le côté droit. Si elle ne s'affiche pas, voir la réponse de la FAQ CDT sur les compilateurs qui ont besoin d'environnements spéciaux. (ainsi que MinGW y Cygwin des réponses pour les gens de Windows).

Si vous avez un projet Eclipse C++ existant, vous pouvez changer la chaîne d'outils associée en ouvrant les propriétés du projet, et en allant à C/C++ Build -> Tool Chain Editor et choisissez la chaîne d'outils que vous voulez dans la liste Current toolchain: pulldown. (Vous devrez décocher l'option Display compatible toolchains only box d'abord si la toolchain que vous voulez est assez différente de celle qui a été précédemment définie dans le projet).

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

Découverte

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

Indexation

Parfois, il est nécessaire de réindexer à nouveau après avoir défini la chaîne d'outils et effectué une construction pour que les anciens avertissements de symboles disparaissent ; cliquez avec le bouton droit de la souris sur le dossier du projet et allez à Index -> Rebuild pour le faire.

(testé avec Eclipse 3.7.2 / CDT 8)

16voto

Jack Kelly Points 553

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 de construction (la cible principale est une plateforme AVR embarquée ; la seconde cible est mon PC local sous Linux pour exécuter les tests unitaires), j'ai trouvé nécessaire de configurer Preferences -> C/C++ -> Indexer -> Use active build configuration ainsi que d'ajouter /usr/include/c++/4.7 , /usr/include y /usr/include/c++/4.7/x86_64-linux-gnu a Project Properties -> C/C++ General -> Paths and Symbols et ensuite de reconstruire l'index.

8voto

Andy Shiue Points 131

J'ai d'abord essayé la solution indiquée ici. Cela a fonctionné mais c'est un peu compliqué, et vous devez le refaire à chaque fois que vous mettez à jour la gcc. J'ai finalement trouvé une meilleure solution en faisant ce qui 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 si cela correspond à vos besoins)
  4. Sur Command to get compiler specs , ajouter -std=c++11 à la fin
  5. Index -> Rebuild

Voila, facile et simple. J'espère que cela vous aidera.

Note : Je suis sur Kepler. Je ne suis pas sûr que cela fonctionne sur les versions antérieures d'Eclipse.

0 votes

Il s'agit de la solution à un autre problème, celui des symboles C++11 non résolus. L'OP avait du mal à obtenir même les symboles C++98 tels que std::cout résolu.

4voto

J'utilise Ubuntu 12.04 / Eclipse 4.2.1 / CDT 8.1.1 et j'ai eu le même problème pendant un certain temps : l'importation d'un projet C++ à partir de SVN causait ces ennuyeuses erreurs "Unresolved inclusion" et je devais plutôt créer un nouveau projet et y copier les fichiers comme solution de rechange (toujours partielle, puisque la fonctionnalité SVN n'était pas présente !)

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

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

  • Redémarrez Eclipse.

Espérons que cela fasse déjà l'affaire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X