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 :

Template et classe "amie" ?


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé 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
    Par défaut Template et classe "amie" ?
    Bonjour,

    J'essaie de mettre au point une classe de liste chainée générique,
    mais ma connaissance des template est trés limitée.

    Mon pb est le suivant:
    La classe CElement doit déclarer 'amie' la classe CList pour que
    celle-ci puisse la manipuler.

    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
     
    template <typename T>
    class CElement
    {
       friend class CList<T>; 
       ...
       private :
           T data; 
           CElement<T> *next;  
    };
     
     
    template <typename T>
    class CList
    {
      CElement<T> *head; 
      CElement<T> *tail; 
     
         public:
            ....
    }
    et là le compilateur me dit: error: CList is not a template

    Quelqu'un pourrait-il m'aider ?

    Merci

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Indique avant un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    template <typename T>
    class CList;

  3. #3
    Membre éclairé 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
    Par défaut
    Merci pour ta réponse mais avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <typename T>
    class CList;
    j'ai 37 erreurs en cascade

    Peut être le pb vient-il des typename identique (T) dans
    les 2 classes ?

  4. #4
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Ah bon ??? Tu peux donner les premières erreurs ?

  5. #5
    Membre éclairé 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
    Par défaut
    Aprés quelques rectification dans mes fonctions membres il n'y a plus que 22 erreurs, on progresse

    Toutes les erreurs sont dû à la surcharge de l'opérateur d'affectation qui
    est déclaré comme ça dans la classe CLIst:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CList operator = (const CList &);
    puis définit comme ça
    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
    22
    23
    24
     
    CList<T> CList<T>::operator = (const CList & source) 
    {  
        if (this != &source) 
        {                    
           empty();
     
           CElement *copy = source.head;
     
           while (copy != NULL)
           {
               if(addEnd(copy->data))
               {
                 copy = copy->next;
               }
                else
                {
                  copy = NULL;
                }
           }
        }
     
        return *this;  //On retourne une référence sur l'objet courant
    }
    les 1ere erreurs sont:

    - T was not declared in this scope
    - template argument l is invalid

    ces 2 erreurs concernent la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CList<T> CList<T>::operator = (const CList & source)
    Si tu as une idée...

  6. #6
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    C'est normal l'espace entre operator et = ?

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

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