J'ai installé Eclipse Indigo pour les développeurs Linux C/C++ sur Ubuntu 10.04 x86.
Lorsque j'utilise une macro prédéfinie commune __BASE_FILE__
Eclipse dit Symbol '__BASE_FILE__' could not be resolved
, mais la compilation est OK. Je dois l'utiliser si souvent dans mon code et Eclipse remplit mon écran de lignes rouges et d'icônes de bugs :)
Comment puis-je réparer cela?
Je ne sais pas si cela résout votre problème spécifique, mais j'ai également eu des erreurs sémantiques. Ils sont sortis de nulle part après avoir eu un projet de travail.
Quoi qu'il en soit, je l'ai corrigé avec une seule option dans les paramètres de l'espace de travail en définissant: "Configuration de build pour l'indexeur: Utiliser la configuration de build active"
L'autre option était "Utiliser la configuration de construction spécifiée dans les paramètres de l'indexeur du projet" et c'est celle qui ne fonctionnait pas. Je pense qu'il a peut-être été corrompu après un crash Eclipse.
Fenêtre -> Préférences -> C/C++ -> Analyse de code -> Erreurs de syntaxe et sémantiques: OFF
Cela ne résoudra pas la cause du problème mais empêchera au moins l'affichage des fausses erreurs.
Suppression du dossier .metadata, puis importation du projet.
Cette façon est OK!
La solution la plus simple consiste à réinitialiser l'indexeur:
Fenêtre/Préférences/C/C++/Indexer.
décochez "Activer l'indexeur" - >> OK
reconstruire tout, peut montrer beaucoup d'erreurs
cochez "Activer l'indexeur" - >> OK
reconstruisez tout
Cette erreur peut être produite par la fermeture forcée d'Eclipse par une panne de courant.
Vous devez reconstruire l'index de votre projet.
Faites un clic droit sur le projet, puis sur Index-> Reconstruire.
Mise à jour: vous devez ajouter des chemins d'accès appropriés à Projet-> Propriétés-> C/C++ Général-> Chemins et symboles. Si cela n'aide pas, vous pouvez configurer Eclipse Code Analyzer (qui génère les "erreurs") dans Projet-> Propriétés-> C/C++ Général-> Analyse de code. Sous la description de l'erreur avec laquelle vous rencontrez un problème, essayez Personnaliser les modèles sélectionnés -> Portée -> Exclusion.
OMI, la bonne solution est de définir le symbole dans Projet -> Propriétés-> Général C/C++ -> Chemins et symboles -> onglet Symboles. Comme vous pouvez supposer que le symbole sera toujours fourni par le compilateur, vous dites simplement à Eclipse de le considérer comme défini.
J'ai eu le même problème récemment, où Eclipse se plaignait d'une macro non définie, que je fournis toujours en utilisant -D<MACRO_NAME>
option de compilation.
Je pense que cela a quelque chose à voir avec l'espace de travail/.metadata. J'ai signalé le problème des erreurs sémantiques, mais Hello World compile et s'exécute. J'ai supprimé le projet, créé un autre, même rapport d'erreur. CDT réinstallé, même chose. Supprimé l'espace de travail, arrêté Eclipse, redémarré, créé un nouveau monde bonjour, même chose. Supprimez à nouveau l'espace de travail, arrêtez à nouveau Eclipse, cette fois, vous remarquerez qu'Eclipse avait recréé le dossier de l'espace de travail lors de l'arrêt alors qu'il ne le trouvait pas. Supprimé l'espace de travail avec Eclipse arrêté. Redémarrage d'Eclipse, création du projet HW, les erreurs s'affichent pendant environ une seconde, puis disparaissent. Projet supprimé, créé un autre, les erreurs s'affichent pendant une seconde, puis pouf. Si vous aviez réellement des projets dans votre espace de travail (le mien était une installation propre), je parie que vous pouvez simplement supprimer le dossier .metadata dans l'espace de travail, et cela le corrigerait.
Personnellement, je suis d'accord avec la réponse de compostus.
Il est bon de résoudre le vrai problème de l'analyseur de code d'Eclipse.
Mais quand j'essaie ces étapes: définir le symbole dans Projet -> Propriétés-> C/C++ Général -> Chemins et symboles
Je ne trouve pas d'onglet de symbole ou aucun endroit pour ajouter un symbole. ce que je veux faire, c'est mettre des macros comme -DANDROID ou #define Android 1 dans Eclipse pour que l'analyseur de code puisse trouver cette définition.
Je suis sous Mac OSX Mountain Lion.
en ajoutant une autre réponse, j'espère que cela aidera quelqu'un.
J'ai un ~ simple espace de travail (1 objet partagé c ++ (version linux d'une DLL, 3 exécutables c ++ et un pydev python)
J'ai vérifié tout le code sur une nouvelle machine, et cela fonctionne bien, mais il y avait de nombreuses "erreurs sémantiques" sur le code std-c et std-C++ et inclut .. J'ai parcouru tous les paramètres de découverte/indexation en vain.
==> la suppression de l'intégralité du dossier .metadata a résolu ce problème.
Comme je n'avais rien mis en place dans l'espace de travail (tous dans les fichiers/makefiles du projet), Eclipse a heureusement créé un nouvel espace de travail, et j'ai simplement dû faire un fichier-> importer-> projets existants
Si sur Ubuntu, allez dans Fenêtre> Préférences> Dans la zone de recherche, tapez "Indexeur"> Sélectionnez Indexeur dans la colonne de gauche. Sous le titre "Options de l'indexeur", cochez les options suivantes (toutes sauf celles impliquant le saut de fichiers):
Sous la rubrique "Stratégie d'indexation", cochez les deux options qui sont:
Sous l'en-tête "Build Configuration for the indexer", sélectionnez l'option suivante:
J'ai eu un problème similaire mais ma compilation était correcte mais Eclipse a montré des erreurs sur les lignes qui utilisaient un #define d'un autre fichier include. J'ai corrigé en cochant "Indexer toutes les variantes d'en-tête". Je pense que le classis #ifndef NOM DE FICHIER dans le fichier include a été traité plusieurs fois dans Indexer et donc la 2e fois le NOM DE FICHIER a été défini de sorte que toutes les # définitions du fichier .h n'étaient pas "vues" par le préprocesseur. Aller à la fenêtre | Préférences | C/C++ | Indexeur.
Je ne sais pas si cela fonctionne pour le problème des OP, mais j'ai eu des erreurs sémantiques dans Eclipse Luna et j'ai pu les résoudre en suivant les instructions de ce fil: Eclipse montre une inclusion non résolue mais il compile
Le compilateur trouve l'en-tête, mais pas Eclipse.
Vous pouvez aider Eclipse et définir le chemin d'accès aux fichiers d'en-tête sous:
Projet -> Propriétés -> Build C/C++ -> Paramètres -> Compilateur -> Comprend
Dans ma situation, Eclipse avait déterminé l'un de mes répertoires d'inclusion, mais n'a pas déterminé qu'il y avait des répertoires de sous-inclusion à l'intérieur.
J'ai utilisé # pragma une fois dans mon code. Cette configuration m'a causé le problème:
--- fileA.h ---
#pragma once
#define MYMACRO(X) func(X)
--- fileB.h ---
#include "fileA.h"
--- fileB.cpp ---
#include "fileB.h"
MYMACRO(5) <---- warning here
J'ai remplacé #pragma une fois par #ifndef #define HEADER_FILE_H #endif, et cela a résolu le problème.
Il s'agit d'un problème d'indexation des fichiers.
Solution - Faites un clic droit sur le projet, Index-> Rafraîchir tous les fichiers.
(S'applique à Eclipse CDT.Oxygen)
Le problème se produit de cette façon: j'insère un nouveau nom de variable dans le code quelque part, par ex. "newone" dans cet exemple:
int a;
foo()
{
a=17;
newone=23;
}
Le fichier est enregistré (donc l'indexeur est réindexé). J'ai ensuite ajouté la définition:
int a, newone;
foo1()
{
newone=0;
}
foo()
{
a=17;
newone=23;
}
L'indexeur affichera toujours l'erreur sur la ligne "newone = 23;" mais pas aux autres lignes de code contenant "newone".
Solution: définissez d'abord vos variables, puis utilisez-les.
M.
essaye ça:
Préférences -> c/c ++ -> Indexeur -> Indexer toutes les variantes d'en-tête
cochez cette option.