IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

Erreur à rallonge sur les pointeurs.


Sujet :

C++

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 214
    Points : 115
    Points
    115
    Par défaut Erreur à rallonge sur les pointeurs.
    Slt, je suis actuellement sur un petit projet. J'essaye de recréer une map. Je crée donc un arbre mais j'ai un problème de pointeur sur mes noeuds...

    Voici l'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ./TestCMap.o: In function `Tests::TestCMap::runTest()':
    TestCMap.cxx:(.text+0xca3): undefined reference to `nsCont::CNoeud<std::pair<int, int> >::CNoeud(nsCont::CNoeud<std::pair<int, int> >*, std::pair<int, int>, nsCont::CNoeud<std::pair<int, int> >*, nsCont::CNoeud<std::pair<int, int> >*)'
    TestCMap.cxx:(.text+0xce6): undefined reference to `nsCont::CNoeud<std::pair<int, int> >::CNoeud(nsCont::CNoeud<std::pair<int, int> >*, std::pair<int, int>, nsCont::CNoeud<std::pair<int, int> >*, nsCont::CNoeud<std::pair<int, int> >*)'


    Donc dans ma fonction de test, j'ai cette erreur dès que j'ajoute cette ligne dans ma méthode insert :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m_Sommet = new Noeud_t(0, make_pair(Obj, Clee));

    ma classe CMap est doublement générique avec un type T et un type Cle.
    Obj, l'objet de type T à insérer et Clee la clée de type Cle à insérer.
    m_Sommet est le sommet de l'arbre de ma map de type pNoeud_t
    Noeud_t est un type défini dans ma classe CMap qui est :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    typedef CNoeud< std::pair < T, Cle > > Noeud_t;
    typedef Noeud_t* pNoeud_t;

    Cette erreur arrive dès que j'essaye de créer un noeud donc!

    Quelqu'un saurait-il d'où cela pourrait-il venir?

    Merci d'avance!

  2. #2
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 612
    Points
    30 612
    Par défaut
    Salut,

    Typiquement, les erreur du genre de
    undefined reference to <quelque chose>
    sont des erreurs qui apparaissent lors de l'édition des liens (la "mise en commun" de toutes les unités de compilation dans un seul fichier exécutable ou de bibliothèque).

    Typiquement, si une telle erreur survient dans le cadre d'une classe template, c'est que la définition des méthode ne se trouve pas - même de manière indirecte - dans le fichier d'en-tête, alors que c'est une condition "sine qua non" lorsque l'on travaille avec des template

    Le problème est à ce point récurrent qu'il y a une entrée dans la FAQ qui s'y intéresse (et qu'une question similaire a été posée il y a quelques jours à peine)

    La question à 0.02€ classique est donc
    Es tu sur que le code implémentant les différentes méthode de ta classe se trouve - même de manière indirecte - dans le fichier d'en-tête :question
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 214
    Points : 115
    Points
    115
    Par défaut
    Effectivement, j'ai déjà vu que c'était l'erreur classique! Le problème étant que j'ai déjà fait ce que propose la FAQ sauf qu'au lieu d'appeler le fichier en tpp, je l'ai appelé en hxx. De plus, j'ai déjà créé plusieurs classes génériques de la sorte avec la même structure et tout marche parfaitement!

    Dans mon cas, ma map fonctionne sauf quand j'essaye de faire un new noeud... J'ai essayé de nombreuses possibilitées mais ça ne marche pas... Mon makefile est généré par éclipse!

    Donc réponse à la question à 0.02€ : Oui!

    Merci d'avance!

    EDIT : j'ai essayé en enlevant juste l'instruction new et ça marche, il me trouve bien mes fonctions! Là, c'est une référence de pointeur qui le dérange! Pas le fait qu'il ne trouve pas la définition d'une fonctions!

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Peux-tu poster un peu de code (ta map et comment tu fais ton new)? Si tu arrives déjà à séparer les définitions des déclarations de template, c'est qu'effectivement ton problème doit être un peu différent.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 214
    Points : 115
    Points
    115
    Par défaut
    C'est bon, trouvée! Fallait vraiment aller la chercher loin celle-là!

    Merci!!!

  6. #6
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Ben fais nous partager qu'on sache au moins pourquoi on t'a répondu

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 214
    Points : 115
    Points
    115
    Par défaut
    En fait, ce qui m'a dérangé, c'est le fait qu'il me parle d'un pointeur non trouvé! Donc je cherchais mon erreur dans mes pointeurs! Mais en fait, c'etait le constructeur d'une des classes inclues à laquelle il faillait ajouter le #include "....hxx"... Donc moi je macharnais sur ma classe map alors que c'etait sur la classe noeud qu'il fallait aller chercher... Pas clair ces fichus messages d'erreur!

    Merci encore!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Debutant] Nouvelle question sur les pointeurs
    Par etiennegaloup dans le forum Débuter
    Réponses: 3
    Dernier message: 11/01/2006, 09h55
  2. Question sur les pointeurs.
    Par Chrisemi dans le forum C++
    Réponses: 5
    Dernier message: 28/10/2005, 23h47
  3. Dev c++ en rade sur les pointeurs ?...
    Par Magicien d'Oz dans le forum C
    Réponses: 17
    Dernier message: 13/10/2005, 19h38
  4. questions sur les pointeurs
    Par Hyoga dans le forum C++
    Réponses: 17
    Dernier message: 08/01/2005, 23h25
  5. Pb de débutant sur les pointeurs!!!
    Par benji17c dans le forum C
    Réponses: 6
    Dernier message: 30/09/2003, 17h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo