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

C++ Discussion :

Classe générique et problème de multiple définition


Sujet :

C++

Vue hybride

SKone Classe générique et problème... 03/01/2008, 14h08
lemmel peut être avec ca : ... 03/01/2008, 14h41
NiamorH Je n'ai pas d'erreur de... 03/01/2008, 15h41
SKone [Edit du premier message]... 03/01/2008, 17h13
NiamorH C'est parce que ta fonction... 03/01/2008, 17h55
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de SKone
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 333
    Par défaut Classe générique et problème de multiple définition
    Bonjour
    J'ai un problème lors du développement d'une classe j'ai eu à surchargé l'opérateur '==' mais je voudrais surchargé de manière différence si je suis face à un float, double ou long double :
    voici ma classe
    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
    template <class T>
    class A
    {
    T x;
    bool operator==(const A<T>&) const;
    };
     
    template <class T>
    bool A<T>::operator==(const A<T>& a) const
    {
    	return a.x == x;
    }
     
    template <>
    bool A<float>::operator==(const A<float>& a) const
    {
    	return std::abs(a.x - x) <= std::numeric_limits<float>::epsilon();
    }
     
    typedef A<int> iA;
    typedef A<unsigned int> uiA;
    typedef A<short> sA;
    typedef A<long> lA;
    typedef A<float> fA;
    typedef A<double> dA;
    typedef A<long double> ldA;
    Comme vous le voyez à cause des typedef j'ai une multiple définition. Est-ce que vous voyez une solution tout en bénificiant des avantages de la "généricité". Merci

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 107

  3. #3
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut
    Je n'ai pas d'erreur de compilation sous Comeau Online.

    Mis à part


  4. #4
    Membre éclairé Avatar de SKone
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 333
    Par défaut
    [Edit du premier message] j'ai corrigé le class T mais ça ne viens pas de là. La spécification pour float existe pour A<int>, A<unsigned int>, ... Ainsi que pour A<float>, ... Donc normalement ça ne ce compile pas... En tout cas avec g++. Ça compile sans problème sauf au moment du link j'ai :
    obj\Debug\e_Motion_VisionMain.o:: In function `ZNK3eMV8Vector3DIfEeqERKS1_':C:/Documents and Settings/solène/Mes documents/dossier a soufiane/e-Motion-Vision//Vector3D.hpp:126: multiple definition of `eMV::Vector3D<float>::operator==(eMV::Vector3D<float> const&) const'
    ne\Mes documents\dossier a soufiane\e-Motion-Vision\Vector3D.hpp:126: first defined here
    ...
    Voilà mon code :
    Vector3D.h
    Vector3.hpp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #define Type(X) typedef X<char>             c  ## X;\
                    typedef X<unsigned char>    uc ## X;\
                    typedef X<short>            s  ## X;\
                    typedef X<unsigned short>   us ## X;\
                    typedef X<int>              i  ## X;\
                    typedef X<unsigned int>     ui ## X;\
                    typedef X<long>             l  ## X;\
                    typedef X<unsigned long>    ul ## X;\
                    typedef X<size_t>           z  ## X;\
                    typedef X<float>            f  ## X;\
                    typedef X<double>           d  ## X;\
                    typedef X<long double>      ld ## X

  5. #5
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut
    C'est parce que ta fonction n'est pas inline alors qu'elle se trouve dans un .h

    Soit tu la met inline, soit tu la déclare seulement dans le .h et tu l'implémente dans le cpp.

    Les typedefs n'instancient pas les classes, ils ne peuvent pas être en cause.

  6. #6
    Membre éclairé Avatar de SKone
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 333
    Par défaut
    Je ne peux pas la mettre dans un *.cpp puisque c'est une classe générique alors qu'inclue un fichier *.hpp. Et même en déclarant inline ou sans comme je l'es montré dans la vrai classe ça Bug Quand même.

    PS : Ne pas tenir compte de la première classe mais des liens Vector3D.h Vector3.hpp

Discussions similaires

  1. Problème de multiple définition
    Par Tallon159 dans le forum C++
    Réponses: 10
    Dernier message: 16/01/2013, 02h04
  2. comment résoudre un problème de multiple définition
    Par razily dans le forum Débuter
    Réponses: 8
    Dernier message: 24/03/2010, 19h29
  3. problème avec une classe générique
    Par bard123 dans le forum Langage
    Réponses: 4
    Dernier message: 27/06/2008, 11h09
  4. probléme lors de définition d'une classe
    Par s-ehtp dans le forum C++
    Réponses: 2
    Dernier message: 05/03/2008, 09h58
  5. Problème avec une classe générique
    Par Core8 dans le forum C++
    Réponses: 3
    Dernier message: 19/03/2007, 03h18

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