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 :

Polymorphisme qui marche pas


Sujet :

C++

  1. #1
    Membre éclairé
    Inscrit en
    Mai 2003
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 86
    Par défaut Polymorphisme qui marche pas
    Bonjour,
    J'ai 3 fois la même fonction avec des prototypes différents :

    HRESULT AddAttributeString(int value, bool right = true, const std::string &sep = "");
    HRESULT AddAttributeString(const char *value, bool right = true, const std::string &sep = "");
    HRESULT AddAttributeString(double value, bool right = true, bool highPrecision = false, const std::string &sep = "");

    J'utilise ces fonctions à plein d'endroits différents et ça marche bien partout sauf lors d'un appel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int i =2;
    AddAttributeString(n,false,",");
    Lors de la compilation j'ai :
    error C2666: 'AddAttributeString' : 2 overloads have similar conversions

    J'ai essayé de caster n en int, en long...
    Si je modifie son type en unsigned int ça compile mais la fonction appelée pendant l'exécution est celle qui prend un double (alors que le reste des paramètres ne matche pas du tout...)

    J'ai temporairement résolu le problème en réécrivant une fonction qui s'appelle différemment mais je ne comprends toujours pas pourquoi l'échec de la compilation.

    Si quelqu'un a une idée...

  2. #2
    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
    C'est ta surcharge qui ne marche pas, pas le polymorphisme

    Bon, n, c'est quoi comme type ?
    La première version prend dont un int, un bool et un string.
    La deuxième un const char* - pourquoi pas un string ?? -, un bool et un string
    La troisième prend un double, 2 bool et un string.

    La troisième ne peut donc pas être appelée, sauf s'il transforme un bool en string... Gros inconvénient des paramè-tres par défaut

  3. #3
    Membre éclairé
    Inscrit en
    Mai 2003
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 86
    Par défaut
    n est un int.
    Je suis complétement d'accord que les paramètres ne correspondent pas.
    Ce qui est bizarre c'est que le 1er paramètre matche bien, enfin en théorie...

    J'ai mis les 3 protos mais celui qui prend un char* n'est à priori pas en cause. Le compilo dit bien qu'il ne sait pas quoi choisir entre la méthode qui prend un double et celle qui prend un int...

  4. #4
    Membre confirmé Avatar de harsh
    Inscrit en
    Février 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 229
    Par défaut
    Est ce la seule erreur de compil (peut etre que ton proto ne correspond pas a la declaration, parfois c'est une erreur con, dans quel cas le compilo te l'indique peut etre plus loin).

    Sinon envoie le bout de code complet exact qui plante a la compile, idem pour tous tes proto et tous le barratin que te sors le compilo

  5. #5
    Membre éclairé
    Inscrit en
    Mai 2003
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 86
    Par défaut
    Merci harsh.

    J'étais persuadé que c'était le 1er paramètre qui posait problème mais le compilo me donnait ça :

    xml_stuff.cpp(94) : error C2666: 'xml::CXmlWriter::AddAttributeString' : 2 overloads have similar conversions
    xml_writer.h(50): could be 'HRESULT xml::CXmlWriter::AddAttributeString(double,bool,bool,const std::string &)'
    xml_writer.h(48): or 'HRESULT xml::CXmlWriter::AddAttributeString(int,bool,const std::string &)'
    while trying to match the argument list '(int, bool, const char [2])'
    J'ai remplacé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    AddAttributeString(n,false,",");
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    AddAttributeString(n,false,boost::lexical_cast<std::string>(","));
    Et ça marche.

    Merkiii

  6. #6
    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
    Tu peux te passer du lexical cast en mettant directement std::string(",") normalement , ça passe.

  7. #7
    Membre éclairé
    Inscrit en
    Mai 2003
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 86
    Par défaut
    Ouais. J'ai mis ça pour vérifier que ça passait bien c'est tout.
    J'ai changé les protos pour du char* à la place du std::string&.

    En tout cas merci.

  8. #8
    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
    Par défaut
    T'utilises MSVC6 ou quoi ?

  9. #9
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    J'avais croisé un truc surprenant dans le passé. Un const char * préfère être converti en bool qu'en std::string. De là à ce que cela explique des choses ...

    Sinon, la surcharge correspond à une des deux formes du polymorphisme ad'hoc. L'autre, ce sont les convertions implicites. Dans l'absolu, il avait bien un problème de polymorphisme.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  10. #10
    Membre éclairé
    Inscrit en
    Mai 2003
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 86
    Par défaut
    Citation Envoyé par Luc Hermitte
    Dans l'absolu, il avait bien un problème de polymorphisme.
    C'est ce que je pense...

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

Discussions similaires

  1. script qui marche pas...
    Par jpg dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 20/10/2004, 14h19
  2. requete(jointure 2 tables) qui marche pas
    Par DaxTaz dans le forum Langage SQL
    Réponses: 3
    Dernier message: 01/06/2004, 17h50
  3. une comparaison qui marche pas.
    Par gandf dans le forum C++Builder
    Réponses: 7
    Dernier message: 16/02/2004, 15h59
  4. [LG]Split qui marche pas
    Par macluvitch dans le forum Langage
    Réponses: 3
    Dernier message: 30/11/2003, 18h19
  5. Sysdate qui marche pas ??
    Par StouffR dans le forum Langage SQL
    Réponses: 4
    Dernier message: 28/08/2002, 13h23

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