Partage
  • Partager sur Facebook
  • Partager sur Twitter

La classe BigInt : problème de constructeur

prototype does not match any in class

    13 août 2008 à 6:21:54

    Bonjour (bonsoir (bonne nuit (bon main (je crois avoir fait le tour! Si j'ai oublié quelqu'un, désolé! :p )))) à tous!

    Alors voilà. Je me suis mis aux exercice de Nanoc. J'ai coder la classe BigInt, et m'en suis bien sortit (quoi que la solution m'a aidé un peu :p ).

    Or voilà, j'ai ma classe complète (sauf les opérateurs * / % ), mais un problème survient lorsque j'essaie de faire ceci :
    #include <ostream>
    #include "BigInt.h"
    
    using namespace std;
    
    int main(void)
    {
        BigInt nombre ="25"; // alors que nombre("25") fonctionne
    
        return 0;
    }
    

    ou ceci :
    #include <ostream>
    #include "BigInt.h"
    
    using namespace std;
    
    int main(void)
    {
        BigInt nombre; // ou nombre = 5, ca ne change rien
    
        nombre = "10";
    
        return 0;
    }
    

    Dans les deux cas, nombre = const char* ne fonctionne pas :
    BigInt2\main.cpp||In function `int main()':|
    BigInt2\main.cpp|10|error: invalid conversion from `const char*' to `int'|
    BigInt2\main.cpp|10|error:   initializing argument 1 of `BigInt::BigInt(int)'|
    ||=== Build finished: 2 errors, 0 warnings ===||


    Je n'ai que deux constructeurs (et aucune surcharge de l'opérateur = ):
    BigInt(int n = 0);
        BigInt(std::string chaine);
    


    Il me semble que le compilo devrait appelé (dans le premier cas) mon deuxième constructeur, alors que dans le deuxième cas, il devrait se contenter de la version qu'il construit, non?

    Ps. Il n'y a aucun pointeur dans ma classe, les deux seuls attributs sont de type vector<short int> et bool.

    Merci d'avance.
    • Partager sur Facebook
    • Partager sur Twitter
      13 août 2008 à 8:24:53

      un char * n'est pas un string. Tu dois faire le constructeur qui prend un char *, il en te le convertira pas en string tout seul.

      Ton opérateur = devrait marcher une fois que tu auras fait ce constructeur.
      • Partager sur Facebook
      • Partager sur Twitter
        13 août 2008 à 10:20:34

        Le problème ici c'est qu'il y a deux conversions implicites requises (const char* --> std::string --> BigInt), ce que le compilo ne sait pas faire. Alors que quand tu appelles explicitement le constructeur, tu supprimes la seconde conversion implicite donc ça fonctionne.

        La solution est donc bien de définir un constructeur prenant un const char*.
        • Partager sur Facebook
        • Partager sur Twitter
          13 août 2008 à 16:32:30

          D'accord. Merci beaucoup.
          • Partager sur Facebook
          • Partager sur Twitter

          La classe BigInt : problème de constructeur

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown