IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage C++ Discussion :

classe template separe en fichier header et cpp


Sujet :

Langage C++

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2009
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 32
    Points : 30
    Points
    30
    Par défaut classe template separe en fichier header et cpp
    salut tout le monde
    je suis débutant en c++, et je veux créer une classe template :
    voila mon code :
    Vecteur.h
    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
     
    #ifndef VECTEUR
    #define VECTEUR
    template<class T>
    class Vecteur {
      private :
            T *m_table;
            int m_taille;
      public :
            //constructeur par defaut :
            Vecteur():m_table(NULL),m_taille(0){
            }
            //constructeurs avec parametres :
            Vecteur(T *table,int taille):m_taille(taille){
            m_table=new T[taille];
                for(int i=0;i<taille;i++)
                {
                    m_table[i]=table[i];
                }
            }
     
            //destructeur :
            ~Vecteur();
     
            void Vecteur::affiche(){
                for(int i=0;i<this->m_taille;i++)
                    {
                    std::cout<<m_table[i]<<"   ";
                    }
            }
     
     
    };
    #endif
    main.cpp
    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
     
    #include <iostream>
    #include"Vecteur.h"
    using namespace std;
     
    int main()
    {
        int *table=new int[10];
        for(int i=0;i<10;i++)
        {
            table[i]=i+1;
        }
        Vecteur <int>h(table,10);
        h.affiche();
     
     
        return 0;
    }
    un petit erreur qui s'affiche :
    templateclasse\main.cpp|16|undefined reference to `Vecteur<int>::~Vecteur()'|
    et si vous pouvez me dire comment je peux sépare la déclaration et l'implémentation en deux fichiers .h et .cpp parce que lorsque je crée deux fichiers .h et .cpp le compilateur me génère des erreurs a cause de l'utilisation des templates .

    merci d'avance.

  2. #2
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    Bonsoir,

    Ta question est traitée dans la FAQ C++ à cet endroit :
    http://cpp.developpez.com/faq/cpp/?p...VERS_templates

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mai 2009
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 32
    Points : 30
    Points
    30
    Par défaut
    d'accord merci.

  4. #4
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Points : 641
    Points
    641
    Par défaut
    Destructeur déclaré mais pas défini !

  5. #5
    Membre chevronné
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Points : 2 205
    Points
    2 205
    Par défaut
    Etant donné que tu fais des allocations, ton destructeur doit être défini, déclaré, et faire quelque chose. (ie tu peux pas te contenter de celui que va générer le compilo).
    "Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu

  6. #6
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Bonjour,
    Je vois que tu utilises des allocations dynamiques pour les éléments de ton tableaux. Je te conseille de faire un petit tour dans la FAQ sur les entrées suivantes : Qu'est-ce qu'un pointeur intelligent ?; le RAII.
    Et même lire l'excellent article sur les pointeurs intelligents de Loïc Joly.

  7. #7
    Nouveau membre du Club
    Inscrit en
    Mai 2009
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 32
    Points : 30
    Points
    30
    Par défaut
    merci de votre aide

Discussions similaires

  1. Probleme de template dans un fichier .cpp
    Par bouritosse dans le forum Débuter
    Réponses: 6
    Dernier message: 01/10/2014, 14h44
  2. Réponses: 2
    Dernier message: 01/12/2011, 13h16
  3. Réponses: 9
    Dernier message: 03/09/2009, 20h25
  4. Réponses: 10
    Dernier message: 26/03/2009, 10h15
  5. Réponses: 9
    Dernier message: 25/09/2005, 16h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo