web-dev-qa-db-fra.com

Déclaration du membre non trouvée

J'ai travaillé sur un projet c ++ en utilisant un éditeur de texte standard. Plus tard, j'ai importé tous les fichiers dans Eclipse pour faciliter le débogage.

Dans Eclipse, une chose étrange se produit. Il se plaint "Déclaration du membre introuvable" même si j'ai inclus le fichier d'en-tête. Le fichier d'en-tête a la définition de la fonction.

Comment puis-je résoudre ce problème?

Merci d'avance

13

"Déclaration du membre introuvable" est une erreur générée par l'outil d'analyse statique Eclipse ( codan ). Si vous obtenez cette erreur, mais que la compilation réussisse, il s'agit d'un faux positif. Les anciennes versions de cet outil sont connues pour donner des faux positifs, voir par exemple ce rapport de bogue . Je recommande donc de mettre à jour Eclipse CDT vers la version la plus récente.

Cette erreur peut également être causée par un problème non résolu empêchant Eclipse d’analyser correctement une partie de votre code. Si vous sélectionnez Index -> Search For Unresolved Includes dans le menu contextuel du projet, vous obtiendrez la liste des inclusions non résolues. Voir cette réponse pour plus de détails sur la solution.

Voici un exemple:

class C {
  void f(std::vector<int>&);
};

void C::f(std::vector<int>&) {} // Member declaration not found

L'exemple ci-dessus provoque l'erreur "Déclaration du membre introuvable" dans Eclipse CDT, même si vous avez inclus <vector> mais n'est pas résolu (en raison de chemins d'inclusion mal configurés).

18
vitaut

J'ai également rencontré ce problème plusieurs fois dans Eclipse, bien que la construction réussisse. Nous pouvons simplement résoudre ce problème en reconstruisant l'index C/C++ dans le menu du projet. :)

6
Srijeyanthan

J'ai remarqué que " Déclaration du membre non trouvée " sera également signalé lorsque vous créez une classe avec un nom déjà utilisé ou un mot clé.

1
Luca Davanzo

Même avec le CDT 9.2.1 et Eclipse Neon 4.6.3, des problèmes "Déclaration du membre introuvable" sont signalés. En réponse à Srijeyanthan, les éléments suivants devraient résoudre le problème: Projet> Index C/C++> Reconstruire.

0
natmat

J'ai également rencontré ce problème lors de la scission des fichiers source et d'en-tête dans Eclipse. Je l'ai résolu en "implémentant des méthodes" Eclipse au lieu de saisir manuellement et de construire le projet.

0
user8787937

J'ai trouvé une erreur dans mon fichier .cpp qui crée ce message. J'avais namespace std { au début du fichier et j'ai placé les nouvelles fonctions que je créais après le } de fermeture pour namespace. Déplacer le } de fermeture à la fin du fichier pour que les fichiers définis se trouvent maintenant dans la variable namespace a corrigé le message d'erreur.

Exemple qui crée l'erreur.

#include "MyStrFuncs.h"

**namespace** std {

MyStrFuncs::MyStrFuncs() {
    // TODO Auto-generated constructor stub
}

MyStrFuncs::~MyStrFuncs() {
    // TODO Auto-generated destructor stub
}

}  // This ends the **namespace**

//Additional functions will now generate the member declaration not found error...

int MyStrFuncs::str2i(string strIn) {
    int results;
    istringstream convert(strIn);

    if( !(convert)>>results) results = 0;

    return results;
}
// Fix by moving closing } for namespace to here.  Good luck.
0
Kurt Sanger

J'ai eu ce problème dans Eclipse, mais la construction du terminal a été un succès. Je viens donc de reconstruire l’index C/C++ dans Eclipse: Faites un clic droit sur le projet -> index -> reconstruit.

0
le vantard