|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||||||
|
Invité de passage
![]() Romain Étudiant Inscription : décembre 2012 Messages : 8 ![]() |
Bonjour à tous,
Tout d'abord je précise que je débute en c++. J'essaye actuellement de faire un petit programme qui gère une bibliothèque (travail scolaire), et pour celà je dois avoir des auteurs qui sont des instances d'une classe Auteur qui elle-même hérite d'une classe Personne. Mon code ressemble donc à cela : Code :
Code :
Code :
Code :
Et voici une partie de ma fonction main en rapport avec tout ça : Code :
[Linker error] undefined reference to `Personne::Nom' Pourriez vous m'éclairer svp je cale complètement. Un grand merci d'avance :D |
||||||||||
|
|
00
|
|
|
#2 |
![]() ![]() Loïc JolyDéveloppeur informatique Inscription : août 2004 Messages : 4 698 ![]() |
Je passerai sur le fait qu'une chaîne de caractères en C++, ce n'est pas un char*, mais un std::string ! Il y a des chances que la personne à blâmer ici soit ton professeur, et non pas toi...
Pour ton problème, peux-tu nous indiquer comment tu compiles ? Souvent, les erreurs de link sont plus liées à ça qu'à un problème dans le code lui-même.
__________________
Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11. |
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Romain Étudiant Inscription : décembre 2012 Messages : 8 ![]() |
Merci de votre réponse rapide.
Dans le cadre du cours je dois utiliser le logiciel Dev C++, et je compile au travers de celui-ci |
|
|
00
|
|
|
#4 |
![]() ![]() Loïc JolyDéveloppeur informatique Inscription : août 2004 Messages : 4 698 ![]() |
Pourrais tu mettre le log de compilation, avec un peu de chance, on y verra des informations.
__________________
Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11. |
|
|
00
|
|
|
#5 | ||
|
Invité de passage
![]() Romain Étudiant Inscription : décembre 2012 Messages : 8 ![]() |
Voici les logs de la compilation:
Code :
C'est surement un truc bête mais ce qui m'embête c'est que ça compile, et c'est au moment de l'édition des liens que ça provoque une erreur. Le logiciel ne peut donc pas me donner d'indication très précise sur mon erreur, d'où mon désarroi Merci d'avance :-) |
||
|
|
00
|
|
|
#6 |
![]() ![]() Loïc JolyDéveloppeur informatique Inscription : août 2004 Messages : 4 698 ![]() |
Désolé, mais je ne vois rien de louche dans ce que je lis. Peut-être quelqu'un ayant plus l'habitude de gcc ?
__________________
Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11. |
|
|
00
|
|
|
#7 | ||||
|
Membre habitué
![]() Loïc Étudiant Inscription : octobre 2009 Messages : 83 ![]() |
Salut.
Je pense que l'erreur vient de ce code : Code :
Ce que tu as écrit est : pour chaque i je renvoie le i ème caractère. Cependant au premier return la fonction s’arrête. Tu renvoies toujours Nom[0]. Dans ton cas tu devrais avoir seulement : Code :
Un char* ou string est tout simplement un tableau de lettre. EDIT : en faite tu n'as pas écrit toutes les méthodes de Personne.h dans Personne.cpp ... donc il ne peut pas faire la liaison. Tu es déjà censé écrire une fonction getNom() dans Personne. Si dans auteur elle fait la même chose pas besoin d'en refaire une |
||||
|
|
00
|
|
|
#8 | |
|
Invité de passage
![]() Romain Étudiant Inscription : décembre 2012 Messages : 8 ![]() |
Ce n'est pas louche comme message d'erreur ?
Citation:
|
|
|
|
00
|
|
|
#9 |
|
Membre habitué
![]() Loïc Étudiant Inscription : octobre 2009 Messages : 83 ![]() |
Tu m'as pris de cour ^^ Fini ta classe Personne tu n'as pas écrit toutes les méthodes dans le .cpp
|
|
|
00
|
|
|
#10 | ||||||
![]() ![]() Loïc JolyDéveloppeur informatique Inscription : août 2004 Messages : 4 698 ![]() |
Citation:
Citation:
Citation:
Citation:
En fait, le code comporte tout un tas de petits soucis, que je n'ai pas signalés afin de laisser Evijn les découvrir pas lui même une fois qu'il sera débloqué, mais aucun qui pour moi conduirait à l'erreur de link rencontrée.
__________________
Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11. |
||||||
|
|
00
|
|
|
#11 | |
![]() ![]() Loïc JolyDéveloppeur informatique Inscription : août 2004 Messages : 4 698 ![]() |
Citation:
Pour tester, si tu crées un nouveau projet, où tu rassemble tout le code dans un seul fichier cpp, as-tu encore un soucis ? PS : N'hésite pas à utiliser la balise [code] (le bouton #) plutôt que [quote] pour citer code source ou messages d'erreur.
__________________
Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11. |
|
|
|
00
|
|
|
#12 | |||||||||||
|
Invité de passage
![]() Romain Étudiant Inscription : décembre 2012 Messages : 8 ![]() |
Citation:
Ainsi quand je fais ma boucle, je demande de retourner le char pointé dans la i ème case du tableau.. Je me trompe ? De plus quand j'écris : Citation:
Citation:
Citation:
Citation:
|
|||||||||||
|
|
00
|
|
|
#13 |
![]() ![]() Loïc JolyDéveloppeur informatique Inscription : août 2004 Messages : 4 698 ![]() |
__________________
Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11. |
|
|
00
|
|
|
#14 | ||
|
Invité de passage
![]() Romain Étudiant Inscription : décembre 2012 Messages : 8 ![]() |
Code :
|
||
|
|
00
|
|
|
#15 |
|
Expert Confirmé Sénior
![]() ![]() Inscription : août 2004 Messages : 3 700 ![]() |
Bonjour,
je t'invite à lire la faq suivante, je pense que tu trouveras la solution à ton problème: http://cpp.developpez.com/faq/cpp/?page=static |
|
|
00
|
|
|
#16 | |
![]() ![]() |
Salut,
Citation:
Il faut bien comprendre que le fait d'avoir un return te fait quitter la fonction dans laquelle tu te trouves (getNom, en l'occurrence), quel que soit le niveau d'imbrication de portée dans lequel tu te trouve. C'est à dire que tu entre dans une boucle, mais, comme tu fais un return "inconditionnel" (tu n'as mis strictement aucune condition pour éviter de passer par le return), il sera effectué "à chaque passage dans la boucle"... Sauf que... une seule exécution de return suffit pour quitter la fonction et que tu passeras systématiquement par le return alors que i est égal à 0 ![]() Autrement dit, ta boucle indique "je veux faire quelque chose quatre fois", mais le code qu'il y a dans la boucle fait que, quoi qu'il arrive, tu sortiras de la fonction à la première itération (lorsque i est égal à 0), et donc, tu renverras toujours... la première chaine de caractères, quoi qu'il arrive. Au final :
__________________
en bas de page
|
|
|
|
00
|
|
|
#17 |
![]() ![]() Loïc JolyDéveloppeur informatique Inscription : août 2004 Messages : 4 698 ![]() |
En effet, le code que tu mets est différent du premier que tu avais posté. Et ce static devant Nom change tout. Fait bien attention à poster exactement le code que tu as, sinon, difficile de t'aider.
Si tu l'enlèves, tu n'as plus cette erreur de link (mais d'autres soucis, que je te laisse le soin de creuser un peu tout seul, avant de revenir vers nous si tu as des soucis).
__________________
Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11. |
|
|
00
|
|
|
#18 | ||||||
|
Invité de passage
![]() Romain Étudiant Inscription : décembre 2012 Messages : 8 ![]() |
Citation:
Citation:
Citation:
Voici toujours la derniere version que j'ai, avec le getNom que j'ai modifié en conséquence: Code :
J'ai toujours une erreur de linker mais différente cette fois ci ! On dirait que j'avance Voici les logs de la compilation: Citation:
|
||||||
|
|
00
|
|
|
#19 |
|
Membre habitué
![]() Loïc Étudiant Inscription : octobre 2009 Messages : 83 ![]() |
Salut.
Désolé pour mon erreur je n'avais pas vu que c'etait un tableau de char* ... Pour ton erreur de linker toujours la même chose tu déclares des méthodes dans Author que tu n'implémentes pas :/ |
|
|
00
|
|
|
#20 | ||
|
Invité de passage
![]() Romain Étudiant Inscription : décembre 2012 Messages : 8 ![]() |
Bonsoir
J'ai résolu mon problème. En fait j'avais deux grosses erreurs, à savoir: - Je n'avais pas implémenté le constructeur par défaut dans ma classe 'Auteur' (celui ci n'est pas hérité si on redéfini le constructeur d'initialisation d'après ce que j'ai compris), et je n'avais pas besoin de redéfinir un destructeur. - Je n'avais pas correctement initialisé mes auteurs dans mon main (j'ai choisi de passer directement via le constructeur d'initialisation car je me cassais les dents sur ma fonction 'setNom' ). Voici mon code final, fonctionnel, au cas où quelqu'un rencontrerait un problème similaire. Code :
Merci à tous pour votre aide Je marque le sujet comme résolu |
||
|
|
00
|
Copyright © 2000-2013 - www.developpez.com