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:
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 .....
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
 
#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!!!