Probleme template de classe c++

Résolu/Fermé
jacinthe87 Messages postés 194 Date d'inscription mercredi 4 février 2009 Statut Membre Dernière intervention 15 juillet 2010 - 31 mai 2009 à 03:15
 ty - 30 déc. 2011 à 19:14
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

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 mercredi 4 février 2009 Statut Membre Dernière intervention 15 juillet 2010 3
31 mai 2009 à 11:33
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
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 mercredi 4 février 2009 Statut Membre Dernière intervention 15 juillet 2010 3 > loupius
31 mai 2009 à 13:22
ça marche!!
merci
0
jacinthe87 Messages postés 194 Date d'inscription mercredi 4 février 2009 Statut Membre Dernière intervention 15 juillet 2010 3
31 mai 2009 à 12:31
ça marche!!
donc le probleme vient du fichier .cpp ?!
Merci
0
oui
0