problème avec liste doublement chainee definie en template!
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:
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:
Code:
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 ..... |
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:
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(); |
Quand je compile ça me renvoie les erreurs :
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!!!