7
votes

Demande de membre qui est de type non-classe

J'ai cette erreur et je ne suis pas capable de résoudre moi-même xxx pré>

le code qui me donne cette erreur est p> xxx pré>

Je dois mentionner que ce mot et ce site sont char * code> type p>

maintenant, ma définition de la classe de mots-clés est celle-ci: p> xxx pré>

Merci beaucoup! P>

MISE À JOUR H1>

En modifiant P>

source.o: In function `Algorithm::indexSite(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
source.cpp:(.text+0x2c6): undefined reference to `Keyword::Keyword()'
source.cpp:(.text+0x369): undefined reference to `Keyword::~Keyword()'
source.cpp:(.text+0x4a8): undefined reference to `Keyword::~Keyword()'
source.o: In function `Keyword::put_site(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)':
source.cpp:(.text._ZN7Keyword8put_siteESs[Keyword::put_site(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)]+0x2a): undefined reference to `Stack<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >::push(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)'
collect2: ld returned 1 exit status
make: *** [tema3] Error 1


4 commentaires

Lisez à propos de L'analyse la plus vexante .


@ Joachimpileborg pas vraiment la même chose est-ce? L'erreur op était plus simple que celle de l'article lié à.


@John: En effet. Techniquement, ce n'est pas un MVP, car il n'y a pas d'ambiguïté. Cela ne peut tout simplement pas être interprété comme la déclaration d'un objet.


Merci @ Joachim Pileborg, comme c'était l'erreur que j'essayais de réparer dans mon cas. La question ici n'a pas aidé, votre allusion à l'article a fait!


3 Réponses :


19
votes

Cette ligne ne fait pas ce que vous pensez:

Keyword() { }
~Keyword() { }


9 commentaires

en retirant le constructeur et le destructeur ou en remplaçant avec votre réponse, je reçois toujours la même erreur


@Sniperu: Vous obtenez probablement la même erreur pour autre chose que le constructeur et le destructeur. Il y a probablement une autre fonction que vous avez oubliée de définir


@Sniperu: En fait, il semble que vous manquiez la définition de Stack :: push () . Avez-vous mis cela dans un fichier d'en-tête? Sinon, voir Ce Q & A .


J'ai une pile.h et une pile.cpp, et il semble fonctionner après avoir inclus ce #include "pile.cpp" après #include "pile.h"


Mais auparavant, je reliais la pile.cpp dans mon makefile


@Sniperu: Ne fais pas ça. .CPP Les fichiers ne sont pas destinés à être #include d. Il suffit de déplacer la définition des fonctions de membre s de pile à pile.h


@sniperu: Linking stack.cpp n'aide pas, car les fonctions des membres d'un modèle de classe sont instanciées uniquement lorsqu'un appel est trouvé à ces fonctions et dans stack.cpp vous Ne les appelez pas, tandis que sur d'autres unités de traduction où vous les appelez leur définition n'est pas visible, le compilateur ne peut donc pas émettre de code pour eux. Résultat: référence non définie. Il suffit de mettre ces définitions dans pile.h


Je l'ai fait et aucune erreur n'a été fondée. Merci beaucoup!


@Sniperu: De rien. S'il vous plaît, envisagez de marquer la réponse comme acceptée si cela résout votre problème :)



4
votes

pas ce xxx

mais ce xxx

dans votre version mot-clé AUX (); est un prototype de fonction pas une déclaration de variable.


1 commentaires

Et si vous essayez d'avoir cette forme sémantique: vous seriez comme pour écrire mot-clé AUX () au lieu de AUX AUX = (); Mais vous ne pouvez pas en raison de détails. Savez-vous ce que serait ce détail?



0
votes

J'ai eu le même problème lorsque je saisi le code suivant dans ma fonction principale, j'ai un fichier list.h and list.cpp contenant ma classe de liste. XXX

I Obtenir une erreur de "Demande de membre" ISPTY "dans" MyList ", qui est de type" liste de type "()" "" "

L'erreur est que le compilateur considère la myList () en tant que prototype de fonction

lorsque je corrige le code d'être xxx

J'ai eu l'erreur "non définie référence à` list :: liste () "et quelques erreurs similaires pour le destructeur.

inspection supplémentaire de mon code et de mes réponses dans cette page J'ai constaté que je dois inclure mon fichier list.cpp dans le fichier main.cpp, mais j'ai inclus list.h dans mon fichier list.cpp mais il Semble que ces informations doivent également être informées au dossier principal. lecture supplémentaire pour Ce didacticiel expliquer pourquoi, si je compile le projet Sans y compris List.cpp, il compilera bien parce que le fichier List.h a le prototype, mais il échouerait dans la phase de liaison car le linkeur ne pourrait pas résoudre l'appel à la liste () à une fonction spécifique. < / p>


0 commentaires