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 :

Surcharge de m�thodes template => no matching function


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    F�vrier 2011
    Messages
    33
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2011
    Messages : 33
    Par d�faut Surcharge de m�thodes template => no matching function
    Bonjour,

    Voila j'ai un petit probl�me, enfin plut�t qqchose que je ne comprends pas ..
    Exemple simple :
    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
     
    template<typename T>
    class TClass
    {
    public:
      T mean() { return (T)666; }
    };
     
    class Test : public TClass<float>
    {
    public:
      float mean(uint i) { return 555.0; }  
    };
     
    int
    main()
    {  
      Test t;
      std::cout << t.mean() << std::endl;
     
      return EXIT_SUCCESS;
    }
    Voila le probl�me : quand on surcharge une m�thode d'un classe template, on ne peux plus avoir acc�s a la m�thode de base... Si on commente la surcharge de m�thode dans la classe Test cela marche...

    POURQUOI ? je ne comprends pas ...

    Quelle est la solution, a part ajouter
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    float mean() { return TClass<float>::mean(); }
    dans la classe Test ???

    Cordialement

  2. #2
    Membre �m�rite

    Profil pro
    Inscrit en
    D�cembre 2008
    Messages
    533
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2008
    Messages : 533
    Par d�faut
    Ce ne serait pas simplement un probl�me de masquage de fonction ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    F�vrier 2011
    Messages
    33
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2011
    Messages : 33
    Par d�faut
    Euuuh ... oui en effet, cela marche ....

    Le compilateur permet de surcharger des m�thodes dans une m�me classe alors pourquoi ce syst�me n'est pas �tendu sur les classes d�riv�es ?

  4. #4
    Membre �m�rite

    Profil pro
    Inscrit en
    D�cembre 2008
    Messages
    533
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2008
    Messages : 533
    Par d�faut
    J'ai eu beau chercher, je n'ai jamais trouv� la raison technique qui justifiait le masquage de fonction. Si quelqu'un sait, je suis preneur.

  5. #5
    Expert confirm�

    Inscrit en
    Novembre 2005
    Messages
    5 145
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par d�faut
    Citation Envoy� par cob59 Voir le message
    J'ai eu beau chercher, je n'ai jamais trouv� la raison technique qui justifiait le masquage de fonction. Si quelqu'un sait, je suis preneur.
    C'est juste une consequence de la regle generale, on arrete de chercher dans les portees englobantes quand on a trouve des definitions dans une portee. Ca marche pour les blocs, pour les namespaces et pour les classes (la classe mere etant consideree comme une portee englobant la classe fille).

    C'est ce qui permet a
    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
     
    { 
       int i;
       {
          int i;
       }
    }
     
    namespace n1 {
       int i;
       namespace n2 {
          int i;
       }
    }
     
    struct M { int i; };
    struct F: M {int i; };
    de fonctionner. Il n'y a simplement pas de regle particuliere pour les fonctions incitant a aller chercher des surcharges supplementaires plus loin. Ca a ete propose, mais ca ouvre apparemment(*) autant de cas problematiques que ca facilite les choses (B.S. en parle dans D&E C++, en citant des cas vecus avec g++ qui a implemente un temps une regle alternative), et l'ajout de using pour importer les noms (au moins pour les namespaces et les classes) a offert une solution viable, meme si il faut faire quelque chose manuellement, aux cas ou on veut reellement la surcharge.

    (*) Il me semble que je veux la surcharge systematiquement, je ne sais pas si c'est parce que je ne remarque pas les cas ou ca poserait probleme ou si c'est une question de style; c'est certain que le style a change depuis la fin des annees 80.

  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
    Par d�faut
    Salut,
    Les fonctions virtuelles en C++ : XVI. Fonction virtuelle et masquage de fonction et XVII. Fonctions virtuelles et fonctions g�n�riques (template)

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. template class & surcharge de m�thode
    Par G�bix dans le forum C++
    R�ponses: 2
    Dernier message: 27/12/2011, 00h38
  2. [template][surcharge] surchage d'une m�thode template
    Par m�phistopheles dans le forum Langage
    R�ponses: 5
    Dernier message: 21/03/2009, 15h22
  3. M�thode template virtuelle
    Par ced1 dans le forum Langage
    R�ponses: 6
    Dernier message: 13/11/2005, 15h14
  4. [Custom Tags] Probl�me avec une surcharge de m�thode
    Par Strab dans le forum Taglibs
    R�ponses: 19
    Dernier message: 26/08/2005, 16h34
  5. Comment surcharger la m�thode OnClose d'un TFrame ?
    Par sdebrois dans le forum Composants VCL
    R�ponses: 2
    Dernier message: 17/01/2005, 20h57

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