Rechercher : dans
Par :

Probleme template de classe c++

Dernière réponse le 31 mai 2009 à 13:22:33 jacinthe87, le 31 mai 2009 à 03:15:29 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « probleme template de classe c++ » dans :
Les templates en C++ Voir Introduction Avantages Inconvénients Quand utiliser des templates ? Que dois-je mettre dans les .hpp et dans les .cpp ? Convention de notations Quelques templates célèbres STL BGL Premiers pas Spécifications de templates Template par...
Introduction à la STL en C++ (standard template library) VoirIntroduction Principales classes de la STL std::pair std::list std::vector std::set std::map Les iterators iterator et const_iterator reverse_iterator et const_reverse_iterator Les algorithmes ...
Problème de lan server sur Counterstrike VoirProblème Comment jouer sur une partie privée à distance, sans que l'interface n'affich :"lan servers are restricted to local clients" Solution Cela se déroule en 2 temps. Utiliser la console développeur (commande du jeu) Soit vous avez déjà...
Adresse IP VoirSommaire Qu'est-ce qu'une adresse IP Déchiffrement d'une adresse IP Adresses particulières Les classes de réseaux (obsolète) Classe A Classe B Classe C Attribution des adresses IP Adresses IP réservées Masques de sous-réseau Interet...
Les classes en langage C++ VoirLa notion d'objet Le langage C est un langage procédural, c'est-à-dire que c'est un langage permettant de définir des données grâce à des variables, et des traitements grâce aux fonctions. L'apport principal du langage C++ par rapport au...
Classe et instance d'objet VoirLa notion de classe On appelle classe la structure d'un objet, c'est-à-dire la déclaration de l'ensemble des entités qui composeront un objet. Un objet est donc « issu » d'une classe, c'est le produit qui sort d'un moule. En réalité on dit qu'un...

1

loupius, le 31 mai 2009 à 03:58:16

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 !

Répondre à loupius

2

jacinthe87, le 31 mai 2009 à 11:33:45

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!
The best way to escape from a problem is to solve it.

Répondre à jacinthe87

4

loupius, le 31 mai 2009 à 13:02:04

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 ?

Répondre à loupius

5

 jacinthe87, le 31 mai 2009 à 13:22:33

ça marche!!
merci The best way to escape from a problem is to solve it.

Répondre à jacinthe87

3

jacinthe87, le 31 mai 2009 à 12:31:12

ça marche!!
donc le probleme vient du fichier .cpp ?!
Merci The best way to escape from a problem is to solve it.

Répondre à jacinthe87
Collection CommentÇaMarche.net