Salut les amis!

j'ai un problème de compilation sous code::Blocks ,il me génère l'erreur suivante au niveau du main:
undefined reference to 'liste <int>::liste(int)'
mon code est le suivant:
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
 
//fichier liste.h
#ifndef LISTE_H_INCLUDED
#define LISTE_H_INCLUDED
template <class T>
class liste{
protected://prevoir un heritage;sinon la classe fille n'a pas acces aux membres,donnees prives de la classe mere
    int taille;
    int NbrElements;//contient le nbre actuel d'elements que contient la liste
    int courant;//indique la position de l'element courant
    T *adr;
    public:
    liste(int);
    liste(liste &f);
    ~liste ();
    void saisie();
    void affiche();
    liste &oppose();
        };
 
 
#endif // LISTE_H_INCLUDED
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
 
//fichier liste.cpp
#include "liste.h"
#include <iostream.h>
template <class T> liste<T>::liste(int n=20){
    taille=n;
    adr=new T[taille];
    NbrElements=0;
    courant=0;
    cout<<"constructiom d'un objet liste dont @ "<<this<<"\n";
    cout<<"adresse du pointeur adr de liste "<<adr<<"\n";
    }
 
 
template <class T> liste<T>::liste(liste &f){
    cout<<"constructeur par recopie";
    taille=f.taille;
    adr=new T[taille];
    for(int i=0;i < taille;i++){
        adr[i]=f.adr[i];//construction par recopie
 
 
                             }
                      }
 
 
template <class T> liste<T>:: ~liste()
{
    delete adr;
    cout<<"destruction de l'objet liste dont @ "<<this<<"\n";
    cout<<"adresse de liste"<<adr<<"\n";
               }
 
 
template <class T> void liste<T>::saisie(){
 
    for(int i=0;i<taille;i++){
 
        cout<<"entrer un nombre dans la liste \n";
        cin>>*(adr+i);
        }
 
   cout<<"la liste contient les nombres suivants:";
    for(int i=0;i<taille;i++)
    {
        cout<<"le nombre d'@ "<<adr+i<<" est egal a "<<*(adr+i);
          }
    }
 
 
 
template <class T>  liste &liste liste<T> :: oppose()
{
    //LE RETOUR PAR REFERENCE SINON L'OBJET  LOCAL CREE EST DETRUIT AVANT D'ETRE UTILISE
   static liste res(taille);
    cout<<"construction de la liste opposee \n";
 
for(int i=0;i< taille;i++)
    {
    res.adr[i]=-adr[i];
    cout<<"\n la valeur de i dans la boucle for de construction "<<i;
 
    }
    for(int i=0;i<taille;i++)
    {
    cout<<"\n le contenu des listes opposées: "<<*(adr+i)<<"  "<<*(res.adr +i)<<"\n";
 
    }
 
   return res;
    }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
//fichier main
#include "liste.h"
#include <iostream>
using namespace std;
 
int main()
{ 
liste<int> a(2);
    return 0;
}
je ne sais pas d'ou vient le probleme!
Merci d'avance les amis!