Probleme template de classe c++

Résolu
jacinthe87 Messages postés 204 Statut Membre -  
 ty -
Bonjour,
j'ai crée une classe "Tableau" avec un constructeur avec et sans argument, lorsque j'appel un constructeur dans main , il m'affiche cet erreur:
[Linker error] undefined reference to `Tableau<int>::Tableau(int)' 


voila mon fichier:
#include <cstdlib>
#include <iostream>

using namespace std;

    template <class T>
    class Tableau{
          protected:
                    T *tab;
                    int dim;
          public:
                 Tableau();
                 Tableau(int);
                 void affiche();
                 
          };

template <class T>
    Tableau<T>::Tableau(){
                       dim=0;
                       tab=NULL;
                       }
    template <class T>
    Tableau<T>::Tableau(int n):dim(n){
                       tab=new T[dim];
                       }
    template <class T>
    void Tableau<T>::affiche(){
         for(int i=0;i<dim;i++){
                 cout<<tab[i]<<endl;
                 }
         }

dans main:
#include <cstdlib>
#include <iostream>
#include "tableau.h"

using namespace std;

int main(int argc, char *argv[])
{
    Tableau<int> t(2);
    system("PAUSE");
    return EXIT_SUCCESS;
}


merci pour votre aide!!

--
The best way to escape from a problem is to solve it.
Configuration: Windows XP
Safari 530.5

4 réponses

  1. loupius
     
    Je suppose que 'tableau;h' est le fichier donné au dessus.
    Si c'est le cas et si c'est bien le fichier inclus, je ne vois pas d'où peut provenir cette erreur.
    Par contre il y a une 'petite' anomalie: new sans delete !
    0
  2. jacinthe87 Messages postés 204 Statut Membre 3
     
    voila j'ai ajouté un destructeur mais toujours le meme probleme:
    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
        template <class T>
        class Tableau{
              protected:
                        T *tab;
                        int dim;
              public:
                     Tableau();
                     Tableau(int);
                     void affiche();
                     ~Tableau();
    
                     
              };
    
    template <class T>
        Tableau<T>::Tableau(){
                           dim=0;
                           tab=NULL;
                           }
        template <class T>
        Tableau<T>::Tableau(int n):dim(n){
                           tab=new T[dim];
                           }
        template <class T>
        void Tableau<T>::affiche(){
             for(int i=0;i<dim;i++){
                     cout<<tab[i]<<endl;
                     }
             }
        template <class T>
        Tableau<T>::~Tableau(){
           delete tab;
           }


    SVP j'ai besoin de votre aide!
    0
    1. loupius
       
      Je n'avais pas dit que le problème venait d'un 'new' sans 'delete', mais simplement qu'il était anormal d'avoir un 'new' sans 'delete'.
      As-tu essayé de tout mettre dans le même fichier ?
      0
      1. jacinthe87 Messages postés 204 Statut Membre 3 > loupius
         
        ça marche!!
        merci
        0
  3. jacinthe87 Messages postés 204 Statut Membre 3
     
    ça marche!!
    donc le probleme vient du fichier .cpp ?!
    Merci
    0