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 :

Problème avec les templates.


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 37
    Points : 24
    Points
    24
    Par défaut Problème avec les templates.
    Bonjour, j'ai un problème avec la réalisation d'une liste chainée générique.
    C'est la classe Iterator qui pose problème. Mon compilateur est GCC.

    La classe cellule.

    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
     
    #ifndef CELLULE_H
    #define CELLULE_H
    #include "iterator.h"
    template<typename T>class Cellule
    {
    	friend class Iterator<T>;
    public:
    	Cellule(T & i) : valeur(&i) , suivante(NULL) {};
    	Cellule() : valeur(NULL) , suivante(NULL) {};
    	template<typename U> friend class Iterator;
    private:
    	T * valeur ;
    	Cellule * suivante ;
    };
    #endif // CELLULE_H
    Voici la classe Iterator

    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
     
    #ifndef ITERATOR_H
    #define ITERATOR_H
    #include "cellule.h"
     
    template<typename T>class Iterator
    {
    public:
     
    	Iterator(); 
    	Iterator( Cellule<T> & cell ) ; courante(cell) , firstCell(cell);//ligne 10
    	void allerDebut();
    	void allerFin();
    	bool avancer();
    	void ajouter(T & elem);	
    	void supprimer();
     
    private:
    	Cellule<T> & courante ;
    	Cellule<T> & firstCell ;
    };
     
    //#include "iterator.tpp"
    #endif
    A la compilation, j'obtiens les erreurs suivantes (entre autre).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    C:/Program Files (x86)/CodeLite/TP_CPP/Projet_CPP/liste/iterator.h:10: error: expected ')' before '<' token
    C:/Program Files (x86)/CodeLite/TP_CPP/Projet_CPP/liste/iterator.h:10: error: 'cell' has not been declared
    C:/Program Files (x86)/CodeLite/TP_CPP/Projet_CPP/liste/iterator.h:10: error: ISO C++ forbids declaration of 'courante' with no type
    C:/Program Files (x86)/CodeLite/TP_CPP/Projet_CPP/liste/iterator.h:10: error: 'cell' has not been declared
    C:/Program Files (x86)/CodeLite/TP_CPP/Projet_CPP/liste/iterator.h:10: error: ISO C++ forbids declaration of 'firstCell' with no type
    Voilà je comprend pas pourquoi il manque une parenthèse.

    J'aimerais également savoir comment utiliser la liste d'initialisation pour initialiser les deux variables membres de "Iterator" avec le constructeur par défaut de Cellule, à la ligne 9.

    Merci d'avance !

  2. #2
    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
    Salut,
    Par rapport au code que tu présentes, la réponse est là F.A.Q. : Comment créer 2 classes qui font référence l'une à l'autre ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 37
    Points : 24
    Points
    24
    Par défaut
    Merci je vais voir

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 37
    Points : 24
    Points
    24
    Par défaut
    OK ça résout le problème des parenthèses, merci beaucoup

    En revanche je me pose toujours la question suivante, est-ce que le fait de déclarer la variable suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cellule<T> & courante ;
    l'initialise avec son constructeur par défaut ?

  5. #5
    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
    Citation Envoyé par mondaying Voir le message
    En revanche je me pose toujours la question suivante, est-ce que le fait de déclarer la variable suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cellule<T> & courante ;
    l'initialise avec son constructeur par défaut ?
    Non. Une référence n'est pas un objet mais un lien vers un objet (un peu comme un pointeur sauf que ça ne peut être nul et ce n'est pas réassignable).
    Suite à cette question, j'ai regardé ton code d'un peu plus près, et il me vient quelques remarques :
    -> pourquoi ton item de liste garde l'élément T par pointeur ? T * valeur => T valeur
    -> garder le début du conteneur par référence (Cellule<T> & firstCell) ok, mais pour le courant tu vas avoir besoin d'un pointeur (Cellule<T> *courante) car une référence ne peut être réassignée.
    -> Un itérateur sert à parcourir des éléments. ajouter/supprimer sont des services de la liste pas de l'itérateur
    -> idem pour allerDebut,allerFin : si tu regardes les conteneurs de la STL, ce sont eux qui possèdent des foncitons begin()/end().

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 37
    Points : 24
    Points
    24
    Par défaut
    Ok merci de ton aide.

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

Discussions similaires

  1. problème avec les template c++
    Par lenas_tshaleb dans le forum C++
    Réponses: 4
    Dernier message: 17/03/2015, 17h58
  2. Problème avec les templates (patrons)
    Par bounadalvidal dans le forum Débuter
    Réponses: 3
    Dernier message: 09/04/2011, 07h14
  3. [Xtext] Problème avec les templates pour les mots clé
    Par P1t0u dans le forum Eclipse Platform
    Réponses: 0
    Dernier message: 10/06/2010, 15h53
  4. Problème avec les templates de class
    Par _SamSoft_ dans le forum C++
    Réponses: 8
    Dernier message: 21/08/2008, 10h30
  5. Problème avec les templates
    Par F-fisher dans le forum C++
    Réponses: 7
    Dernier message: 28/06/2008, 16h04

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