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 :

[deb.]Surcharge des Oper. Erreur "ambiguous overload&qu


Sujet :

C++

  1. #1
    Membre actif
    Inscrit en
    Décembre 2003
    Messages
    491
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 491
    Points : 245
    Points
    245
    Par défaut [deb.]Surcharge des Oper. Erreur "ambiguous overload&qu
    Bonjour,
    J'ai un soucis avec une surcharge d'operateur qui ne fait pas ce que je veux.
    En fait j'en ai fais deux sur le meme modele, ce qui fait que je ne comprend pas pourquoi une est acceptee et l' autre pas.

    Voila j'ai une defini une class avec des variables privates div et num.

    Dans ma class j'ai defini une surcharge pour mes deux elements avec le mot cle friend pour justement permettre l'acces a ces variables.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    //surcharge de l'operateur >>cin
    friend istream& operator >> (istream&, const fraction& F);
     
    //surcharge de l'operateur <<cout
    friend ostream& operator << (ostream&, const fraction& F);
    Ici j'ai implemente ma surcharge pour les deux operateurs.
    (J'ai implemente et controle cout avant et separement raison pour laquelle je sais que cela marche)

    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
     
    //Surcharge de l'operateur cout<<
    ostream& operator << (ostream& flux, const fraction& F){
    flux << "\n Nominateur   : ";
    flux << F.num;
    flux << "\n Denominateur : ";
    flux << F.div;
    cout <<"\n"; 
    return flux;
    }//Fin Surcharge cout
     
    //Surcharge de l'operateur cin>>
    istream& operator >> (istream& flux, const fraction& F){
    cout << "\n Numerateur   ?:";
    flux >> F.num;
    cout << "\n Denominateur ?:";
    flux >> F.div;
    return (flux);
    }//Fin Surcharge cin
    Et je me prend le message d'erreur suivant:

    C:\Dev-Cpp\classFraction\fra.cpp In function `std::istream& operator>>(std::istream&, const fraction&)':
    49 C:\Dev-Cpp\classFraction\fra.cpp ambiguous overload for 'operator>>' in 'flux >> F->fraction::num'
    note C:\Dev-Cpp\include\c++\3.4.2\bits\istream.tcc:87 candidates are: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(std::basic_istream<_CharT, _Traits>&(*)(std::basic_istream<_CharT, _Traits>&)) [with _CharT = char, _Traits = std::char_traits<char>] <near match>
    Je ne saisit pas d'ou viens l'ambiguite.

    Est-ce que quelqu'un peut m'aider?

    D'avance merci

    Marc_3

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 394
    Points : 473
    Points
    473
    Par défaut
    Dans le profil de l'op >> tu déclares le paramètre comme constant.
    Ainsi, tous les membres de ce paramètres seront constant dans le corps de la fonction.
    (La fonction s'engage à ne pas modifier le paramètre).
    Ceci est une erreur, puisque cette fonction est censée modifier l'objet passé en paramètre.
    En conséquence de quoi à la ligne flux << F.num; le compilateur recherche un opérateur de profil istream& operator<<(istream&, const int) ou approchant, qu'il ne trouve bien sûr pas. Après le pkoi de l'ambigüité, c'est un peu long ici.
    En bref, enlève le const et tout ira pour le mieux

  3. #3
    Membre actif
    Inscrit en
    Décembre 2003
    Messages
    491
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 491
    Points : 245
    Points
    245
    Par défaut
    Tous ca pour dire que l'on ne comprend jamais assez bien la portee d'un mot cle.

    Merci pour la reponse effectivement le code est maintenant accepte a la compil.

    Marc_3

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

Discussions similaires

  1. Réponses: 21
    Dernier message: 06/05/2007, 11h49
  2. Modification d'un texte dans une fenetre "d'erreur"
    Par PAUL87 dans le forum Access
    Réponses: 8
    Dernier message: 21/10/2005, 13h12
  3. Commande date. Faire des opération sur l'heure?
    Par fidififouille dans le forum Linux
    Réponses: 9
    Dernier message: 23/08/2004, 15h16
  4. afficher la signature des opérations dans XDE
    Par ChristopheH dans le forum Rational
    Réponses: 1
    Dernier message: 24/05/2004, 15h41
  5. [JSP] thread ? Message d'avancement des operations en cours
    Par buffyann dans le forum Servlets/JSP
    Réponses: 14
    Dernier message: 18/12/2003, 11h39

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