Bonjour à tous,
j'ai un probleme avec les listes doublement chainées!!!
la structure prevue est la suivante :
1. j'ai un fichier liste.h qui definit un template:
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 #ifndef _LISTE_H #define _LISTE_H #include <iostream> using namespace std; // debut namespace namespace GestionListe { template <class T> class Liste; template <class T> class Element { friend class Liste<T>; private: T info; // la donnee à stocker de type T Element<T>* suivant; Element<T>* precedant; t public: Element<T>(T paramInfo): info(paramInfo), suivant(NULL), precedant(NULL){} }; template <class T> class Liste { private: Element<T>* tete; Element<T>* queue; unsigned int nbElts; Liste(const Liste& l); void operator=(const Liste& l); public: Liste(); ~Liste(); Element<T>* ajouter(T paramInfo, Element<T>* EltPreced = NULL); void vider(); void afficher() const; unsigned int getNbElts() const { return nbElts; }; Element<T>* supprimer(Element<T>* Elt); Element<T>* rechercher(T paramInfo, Element<T>* Elt = NULL); bool existe(Element<T>* Elt); }; } // fin namespace
2. un fichier liste.cpp qui donne l'implementation:
3. dans mon main : mon pb est ici, je dois pouvoir constituer une liste de personnes, une liste d'etudiants, une liste de documents, ....
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
25
26 //IMPLEMENTATION #include "liste.h" #include <iostream> using namespace GestionListe; using namespace std; // constructeur par defaut de liste template <class T> Liste<T>::Liste() { tete = NULL; queue = NULL; nbElts = 0; } //affiche toute la liste template <class T> void Liste<T>::afficher() const { if (tete == NULL) cout << "la liste est vide..." << endl; else { cout << "la liste contient : " << nbElts << " element(s)"<< endl; Element<T>* courant = tete; do { cout << "\t" << courant->info << endl; courant = courant->suivant; } while (courant); } } // Definition des autres membres .....
Quand je compile ça me renvoie les erreurs :
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 #include <iostream> #include "personne.h" #include "etudiant.h" #include "liste.h" using namespace GestionListe; using namespace std; // un exemple Etudiant Alain("Alain","IDIGO",1970,"Rue MAFUOSI",12343,"NB","It"); cout << "\n creer une liste (vide)" << endl; Liste<Etudiant> listEtud; listEtud.afficher(); cout << "ajouter un nouvel element cree par valeur" << endl; listEtud.ajouter(Alain); listEtud.afficher();
C:\Dev-Cpp\Projets\liste.cpp In member function `void GestionListe::Liste<T>::afficher() const [with T = Etudiant]':
30 C:\Dev-Cpp\Projets\main.cpp instantiated from here
44 C:\Dev-Cpp\Projets\liste.cpp no match for 'operator<<' in 'std::operator<< [with _Traits = std::char_traits<char>](((std::basic_ostream<char, std::char_traits<char> >&)(&std::cout)), ((const char*)"\t")) << courant->GestionListe::Element<Etudiant>::info'
note C:\Dev-Cpp\include\c++\3.4.2\bits\ostream.tcc:
63 candidates are: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(std::basic_ostream<_CharT, _Traits>&(*)(std::basic_ostream<_CharT, _Traits>&)) [with _CharT = char, _Traits = std::char_traits<char>]
...
Voilà resumée la situation!!!
J'attends vivement de votre aide car là je suis paumé, j'ai passé 3 jours dessus sans bouger!
PS c'est la première fois j'utilise les templates! j'ai fouillé sur le net sans vraiment trop trouvé ce que je cherches!
Merci à tous!!!
Partager