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

Autres éditeurs Discussion :

[G++] Ambuguité sur une surcharge de fonction


Sujet :

Autres éditeurs

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite

    Homme Profil pro
    Inscrit en
    Mars 2003
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 291
    Par défaut [G++] Ambuguité sur une surcharge de fonction
    Bonjour,
    J'utilise GCC v4.1...
    je n'ai pas une grande habitude des subtilités du C++ en matière de surcharge, mais il me semble que le code suivant devrait fonctionner :
    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
     
    class cl
    {
        public:
        virtual void func(const char *string) {
            cout << "const char*" << endl;
        }
        virtual void func(const std::string &str) const { func(str.c_str()); }
    };
     
    int main(void)
    {
        cl c;
        c.func("Test");
        c.func(std::string("Test"));
        return 0;
    }
    Hors, si le premier appel se déroule bien, le second par en boucle infinie, en observant la pile il semble que ce ne soit pas func(const char *) qui soit appelé mais que l'on ait un appel récursif (et donc dans ce cas infini)
    J'ai fait une erreur quelque part ?
    Merci
    http://beuss.developpez.com
    Tutoriels PostgreSQL, Assembleur, Eclipse, Java

  2. #2
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    Salut !

    la surdéfinition qui prend unstd::string en paramètre est déclarée const

    donc à partir du moment où tu l'appelles, tu considère que tu es sûr une instance constante, or la surdéfinition qui prend un const char* n'est pas const donc le seul choix restant est de se rabattre sur la surdéfinition qui prend un std::string en paramètre... ce qui ne pose pas de problème puisqu'il est possible d'effectuer implicitement le cast "const char*" ==> "std::string"
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  3. #3
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    En fait, la deuxième méthode est déclarée const, donc pour l'appel récursif, il cherchera aussi une méthode const qui convienne. Or il y a un constructeur de string qui prend un const char* en argument, et la méthode associée est const...
    La boucle est bouclée.

    edit : trop tard

  4. #4
    Membre émérite

    Homme Profil pro
    Inscrit en
    Mars 2003
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 291
    Par défaut
    Merci pour votre rapidité, j'avais donc bien fait une erreur
    Merci encore
    http://beuss.developpez.com
    Tutoriels PostgreSQL, Assembleur, Eclipse, Java

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

Discussions similaires

  1. clic sur une cellule active fonction recherche
    Par john63 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/11/2007, 21h48
  2. Réponses: 1
    Dernier message: 20/01/2007, 14h06
  3. [FLASH 8] Creer/utiliser/réfléchir sur une bibli de fonction externe !?
    Par Lorenzo77 dans le forum ActionScript 1 & ActionScript 2
    Réponses: 4
    Dernier message: 16/01/2007, 13h35
  4. selection sur une table en fonction de plusieurs ligne
    Par dimdidi dans le forum Langage SQL
    Réponses: 2
    Dernier message: 06/12/2004, 08h42
  5. Contraite NULL sur une colonne en fonction d'une autre colon
    Par speedy1496 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 25/04/2004, 19h29

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