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++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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.

+ 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