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

Langage C++ Discussion :

Pb Liste doublement chainée template


Sujet :

Langage C++

  1. #1
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2005
    Messages
    97
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2005
    Messages : 97
    Points : 78
    Points
    78
    Par défaut Pb Liste doublement chainée template
    bonjour,

    je suis sur un projet et j'ai besoin de me faire une liste générique.

    la cellule est définie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #ifndef Cellule_h
    #define Cellule_h
     
      template <typename T> class Cellule
      {
      private:
        T val;
        Cellule<T>* suiv, *prec;
      public:
        Cellule();
        Cellule(T v);
        virtual ~Cellule();
        virtual T getVal()const;
        virtual void setVal(T);
        virtual Cellule<T>* getSuiv()const;
        virtual void setSuiv(Cellule<T> * s);
        virtual Cellule<T>* getPrec()const;
        virtual void setPrec(Cellule<T> * p);
      };
     
    #endif
    dans ma classe liste qui inclue cellule.h j'ai défini une fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     template<class T>  void Liste<T>::ajoutApres(Place p, T t)
     {
     Cellule<T>* pCell= new Cellule<T>();
      if (estVide())
        {setPremier(pCell);setDernier(pCell);} 
       else
        {setPrecedent(pCell,p);
        if (p==dernier())   {setSuivant(p,pCell);setDernier(pCell);}
        else
         {setSuivant(pCell,suivant(p));
          setPrecedent(suivant(p),pCell);
          setSuivant(p,pCell);}
        }
      nbElem++;
    }
    j'ai une erreur sur la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cellule<T>* pCell= new Cellule<T>();
    l'erreur :
    [Linker error] undefined reference to `Cellule<int>::Cellule()'

    avez vous une idée?

    merci
    Le Principe de Peter : « Avec le temps, tout poste sera occupé par un incompétent incapable d'en assumer la responsabilité. »

  2. #2
    Membre averti
    Avatar de David Fleury
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 253
    Points : 307
    Points
    307
    Par défaut
    j'ai bien une idée, mais pourquoi tu n'utilises pas directement std::list ?
    (sauf si le but de l'exercice est de faire une liste chaînée évidement)
    ou même un simple std::vector

  3. #3
    Membre habitué Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Points : 177
    Points
    177
    Par défaut
    Ta classe Cellule est une classe abstraite (car certaines de ses fonctions sont virtuelles), et en C++ tu ne peut pas instancier un objet à partir d'une classe abstraite.
    Donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Cellule<T>* pCell= new Cellule<T>();
    n'est pas faisable.

    Il faudrait que tu déclare une nouvelle classe qui hérite de Cellule, puis redéfinir tes fonctions virtuelles, et ensuite tu pourra instancier un objet
    avec cette classe.

    Mais effectivement ce serait plus facile avec std::list.

  4. #4
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2005
    Messages
    97
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2005
    Messages : 97
    Points : 78
    Points
    78
    Par défaut
    tintin72 mes fonctions ne sont pas virtuelles pures mais simplement virtuelles j'ai donc un .cpp ou je les instancie.

    merci pour votre aide je continue à chercher
    Le Principe de Peter : « Avec le temps, tout poste sera occupé par un incompétent incapable d'en assumer la responsabilité. »

  5. #5
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    L'intérêt des virtuels m'échappe.
    De même que la présence d'un constructeur par défaut.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  6. #6
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2005
    Messages
    97
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2005
    Messages : 97
    Points : 78
    Points
    78
    Par défaut
    J'ai trouvé mon erreur vient tout simplement des liens entre fichiers pour les templates. cf le faq question "Pourquoi mes templates ne sont-ils pas reconnus à l'édition des liens ?"

    merci.
    Le Principe de Peter : « Avec le temps, tout poste sera occupé par un incompétent incapable d'en assumer la responsabilité. »

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

Discussions similaires

  1. liste doublement chainée
    Par gorgonite dans le forum Caml
    Réponses: 16
    Dernier message: 30/07/2007, 15h17
  2. liste doublement chainée
    Par Ucom-C++ dans le forum C
    Réponses: 11
    Dernier message: 07/06/2007, 13h34
  3. Réponses: 2
    Dernier message: 24/03/2007, 12h48
  4. Problème sur les listes doublement chainée
    Par Traouspont dans le forum C
    Réponses: 5
    Dernier message: 05/01/2007, 12h02
  5. Liste doublement chainée
    Par sorry60 dans le forum C
    Réponses: 23
    Dernier message: 03/12/2005, 17h12

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