Probleme template de classe c++

Résolu
jacinthe87 Messages postés 194 Date d'inscription   Statut Membre Dernière intervention   -  
 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!!

4 réponses

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
jacinthe87 Messages postés 194 Date d'inscription   Statut Membre Dernière intervention   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
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
jacinthe87 Messages postés 194 Date d'inscription   Statut Membre Dernière intervention   3 > loupius
 
ça marche!!
merci
0
jacinthe87 Messages postés 194 Date d'inscription   Statut Membre Dernière intervention   3
 
ça marche!!
donc le probleme vient du fichier .cpp ?!
Merci
0
ty
 
oui
0