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 :

[Template]Probléme de compilation


Sujet :

Langage C++

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 2
    Points : 1
    Points
    1
    Par défaut [Template]Probléme de compilation
    Bonjour ,

    J'ai plusieurs questions a vous posez.Tout d'abord je voudrai savoir la différence entre template<typename T> et template<classT> (dans quel cas est-il préférable d'utilisé l'un que l'autre ?)

    J'ai un sousci de compilation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    main.cpp:(.text+0x40): undefined reference to `Vecteur<int>::operator[](int)'
    main.cpp:(.text+0x77): undefined reference to `Vecteur<int>::operator[](int)'
    Alors que tout est ok au niveau du code:

    Vecteur.hxx
    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
     
    #include <iostream>
    #include<cstring>
    #include<cstdlib>
     
    using namespace std;
    template<class T=int>
    class Vecteur{
    private:
      int taille;
      T *tab;
    public:
      Vecteur(int t){  
        if(t<=0)
          exit(0);
        else{
          taille=t;
          tab= new T[taille];  
        }
      }
     T& operator[](int );
      Vecteur & operator=(const Vecteur &v);
    };
    Vecteur.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
    19
    20
     
    #include "Vecteur.hxx"
    template<class T> T& Vecteur<T>::operator[](int i){
      if(i<0||i>=taille)
        exit(0);
      return tab[i];
    }
     
    template<class T> Vecteur<T> & Vecteur<T>::operator=(const Vecteur & vcopie){
      int i=0;  
    if(this!=&vcopie){
        if(vcopie.taille==0)
          exit(0);
        taille=vcopie.taille;
        tab=new T[taille];
        for(i=0;i<taille;i++)
          tab[i]=vcopie[i];
      }
      return *this;
    }
    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
    #include "Vecteur.hxx"
    using namespace std;
     
    int main(){
      int i=0;
      Vecteur<int> V(10);
      for(i=0;i<10;i++){
        V[i]=2*i;
    }
     for(i=0;i<10;i++)
     cout<< "Compteur: "<<V[i]<<endl;
     return 0;
    }
    Merci d'avance

  2. #2
    Membre expérimenté
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Points : 1 685
    Points
    1 685
    Par défaut
    Bonjour,

    à ma connaissance, il n'y a pas de différence entre template<typename ...> et template<class ...>.

    Ton problème vient, à mon avis, du fait que tu as défini tes fonctions template dans un .cpp alors que ce n'est pas possible.
    Les définitions doivent être écrites dans un fichier d'en-tête.

    Regarde du côté de la faq pour les explications.

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci infiniment

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/09/2013, 12h04
  2. Réponses: 5
    Dernier message: 30/08/2010, 18h26
  3. Réponses: 1
    Dernier message: 30/08/2010, 13h11
  4. problèmes de compilation, templates
    Par julie_n3k0 dans le forum C++
    Réponses: 2
    Dernier message: 24/08/2009, 14h09
  5. Problème de compilation template
    Par Bourrine dans le forum Langage
    Réponses: 4
    Dernier message: 20/01/2006, 21h15

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