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 :

Surcharge d'opérateur dans une classe template


Sujet :

Langage C++

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2006
    Messages
    112
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2006
    Messages : 112
    Points : 58
    Points
    58
    Par défaut Surcharge d'opérateur dans une classe template
    Bonjour,

    Pourriez-vous m'aider sur la syntaxe d'un morceau de code consistant à définir un opérateur pour une classe template ? J'ai vérifier la syntaxe dans mon livre et ça devrait être correcte, mais mon compilateur me dit le contraire.

    J'ai une classe template définie ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    template <typename Elem, size_t DIM = 10>
    class Vecteur : public VecS <Elem, DIM>, virtual public Entite
    Et dans cette classe template je déclare l'opérateur += ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    virtual Vecteur& operator += (const Vecteur &);
    que je définis ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    template <typename Elem, size_t DIM>
    Vecteur <Elem,DIM> & Vecteur<Elem,DIM>::operator += (const Vecteur & V)
    {
        // Code ...
    }
    Mais j'ai une erreur à l'édition des liens, celui ci me dit que mon opérateur n'est pas définit ou je ne sais quoi ...

    Auriez-vous une idée sur l'origine de l'erreur ?

    merci :-)

  2. #2
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 626
    Points : 30 684
    Points
    30 684
    Par défaut
    Salut,

    une petite question avant de commencer...

    La définition est-elle bien dans le fichier d'en-tête (même de manière indirecte), condition sine qua non pour que le compilateur trouve le code à adapter selon le type
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2006
    Messages
    112
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2006
    Messages : 112
    Points : 58
    Points
    58
    Par défaut
    Ah eh bien non j'ai été mettre la définition dans le .cpp comme il est de coutume.
    C'est étrange ça, j'ai toujours eu l'habitude de déclarer dans le .hpp et de définir dans le .cpp.

    Je vais modifier ce qu'il faut.

    merci

  4. #4
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2006
    Messages
    112
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2006
    Messages : 112
    Points : 58
    Points
    58
    Par défaut
    C'est étrange.

    Je dois olbigatoirement mettre mes définitions dans le .hpp lorsque j'ai des classes template ? Je ne savais pas du tout ...

    merci

  5. #5
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Comment tu veux que le compilateur instancie un template sans sa définition ?
    Il ne peut pas, tout simplement. C'est pour ça que tu dois lui fournir.

    Une solution aurait été de rajouter un délai sur l'instanciation des templates, pour ne les instancier qu'à l'édition de liens (le fameux export template) mais ça n'a jamais été implémenté dans les compilateurs populaires.
    Boost ftw

  6. #6
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2006
    Messages
    112
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2006
    Messages : 112
    Points : 58
    Points
    58
    Par défaut
    Désolé je suis mathématicien pas informaticien, les détails d'implémentation sous-jacent au code m'échappent parfois.

    Ok, merci bien

  7. #7
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 626
    Points : 30 684
    Points
    30 684
    Par défaut
    En fait, les problèmes à l'édition de liens face aux fonctions et classes template sont tellement récurrent qu'il existe une entrée de la FAQ qui l'explique (normalement clairement)

    Il n'est pas impossible de séparer la déclaration de la définition, mais il faut veiller à ce que - au final - l'implémentation de la fonction se trouve dans le fichier d'en-tête
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VBA] Surcharge d'opérateur dans une classe VBA
    Par remitbo dans le forum Général VBA
    Réponses: 1
    Dernier message: 17/09/2011, 07h27
  2. Réponses: 5
    Dernier message: 24/08/2011, 16h34
  3. Typedefs dans une classe template
    Par olivier1978 dans le forum Langage
    Réponses: 1
    Dernier message: 29/10/2007, 01h12
  4. typedef dans une class template
    Par yan dans le forum Langage
    Réponses: 2
    Dernier message: 01/10/2007, 10h43
  5. Class interne dans une classe template
    Par MatRem dans le forum Langage
    Réponses: 26
    Dernier message: 15/06/2006, 10h45

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