C++ problème de template

Nerazzuri

Nouveau membre
Salut à tous ! Bon alors voila, je veux faire une liste doublement chaînée générique (donc avec des template). J'ai une classe Liste qui hérite d'une classe Maillon, quand je compile no problem mais quand Visual C++ construit le .exe il me sort ça :

--------------------Configuration: Liste - Win32 Debug--------------------
Compiling...
Liste.cpp
Linking...
test.obj : error LNK2001: unresolved external symbol "public: void __thiscall Liste<int>::ErreurListe::affiche(void)" (?affiche@ErreurListe@?$Liste@H@@QAEXXZ)
test.obj : error LNK2001: unresolved external symbol "public: void __thiscall Liste<int>::RetireEnpos(int)" (?RetireEnpos@?$Liste@H@@QAEXH@Z)
test.obj : error LNK2001: unresolved external symbol "public: void __thiscall Liste<int>::Affiche(void)" (?Affiche@?$Liste@H@@QAEXXZ)
test.obj : error LNK2001: unresolved external symbol "public: void __thiscall Liste<int>::AjouterEnpos(int,int)" (?AjouterEnpos@?$Liste@H@@QAEXHH@Z)
test.obj : error LNK2001: unresolved external symbol "public: __thiscall Liste<int>::Liste<int>(void)" (??0?$Liste@H@@QAE@XZ)
Debug/Liste.exe : fatal error LNK1120: 5 unresolved externals
Error executing link.exe.

Liste.exe - 6 error(s), 0 warning(s)

Je pense que c'est un problème d'héritage avec les template mais je ne vois pas du tout comment le résoudre. [:nerazzuri:3]

voila le code

Maillon.h

[cpp]template <class T>
class Maillon
{
T elem;
Maillon *suivant;
Maillon *precedent;

public :

Maillon();
Maillon *LireSuivant ();
Maillon *LirePrecedent ();
T LireElem();
void EcrireSuivant (Maillon *);
void EcrirePrecedent (Maillon *);
void EcrireElem (T);

};[/cpp]


Maillon.cpp
[cpp]
#include "Maillon.h"

template <class T>
Maillon<T>* Maillon<T> :: LireSuivant ()
{return suivant;}

template <class T>
Maillon<T>* Maillon<T>:: LirePrecedent ()
{return precedent;}

template <class T>
void Maillon<T> :: EcrireSuivant (Maillon *m)
{suivant=m;}

template <class T>
void Maillon<T> :: EcrirePrecedent (Maillon *m)
{precedent=m;}

template <class T>
void Maillon<T> :: EcrireElem (T ob)
{elem=ob;}

template <class T>
T Maillon<T> :: LireElem()
{return elem;}
[/cpp]

Liste.h
[cpp]#include "Maillon.h"

template <class T>
class Liste
{private :
Maillon<T> *premier;
Maillon<T> *dernier;
int taille;


public :

Liste();
void AjouterApres(Maillon<T>*, Maillon<T>*) ;
void AjouterEnpos(T, int);
void RetireMaillon(Maillon<T>*);
void RetireEnpos (int);
int RecherchePos (T);
T LireEnPos (int);
void Affiche();
bool EstVide();
T element(int);
int Longueur();


class ErreurListe
{char *mess;

public :

ErreurListe(char *);
void affiche();
};

};[/cpp]

Main
[cpp]
#include <iostream.h>
#include <stdlib.h>
#include "Liste.h"

void main()
{
Liste<int> L;
try{
L.AjouterEnpos(11, 0);
L.AjouterEnpos(46, 1);
L.AjouterEnpos(99, 2);
L.Affiche();
L.RetireEnpos(1);
L.Affiche();
}
catch (Liste<int> :: ErreurListe e)
{e.affiche();}
}[/cpp]
 

Nerazzuri

Nouveau membre
Et une fois de + j'ai résolu les problème tout seul ! En faite faillait tout mettre dans le .h
 

manoola

Nouveau membre
salut, j'ai eu le meme probleme mais j'ai pas bien compris comment tu as resolu le probleme.
et merci de me repondre
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 131
Messages
6 717 959
Membres
1 586 383
Dernier membre
potofeu
Partager cette page
Haut