2014-04-27 5 views
-3

Je veux ajouter >> surcharge à ma classe, mais quand je le compiler, le compilateur me donne cette erreur:C++ surcharge opérateur >>

In function 'std::istream& operator>>(std::istream&, const Dogru&)': 
[Error] ambiguous overload for 'operator>>' (operand types are 
     'std::istream {aka std::basic_istream<char>}' and 'const int') 

J'ai fait << surcharge sans problèmes, mais avec >> il n'est pas travail.

La partie de mon code:

class Dogru{ 
    private: 
     int yon_x, yon_y, yon_z; 
    public: 
     friend istream& operator>> (istream &in, const Dogru &dog); 
    }; 
    istream& operator>> (istream &in, const Dogru &dog){ 
     in >> dog.yon_x; 
     in >> dog.yon_y; 
     in >> dog.yon_z;  
     return in; 
    } 

    int main(){ 
     Dogru al; 
     cout << "Enter al's x y z:"; 
     cin >> al; 
     return 0; 
    } 

Répondre

1

Vous devez modifier l'état de dog si

istream& operator>> (istream &in, const Dogru &dog) 
           // ^^ const should be removed 

Utilisez référence const pour la surcharge << opérateur

3

Vous ne pouvez pas mettre la lire la valeur dans un objet const. Retirez les const:

istream& operator>> (istream &in, Dogru &dog){ 
    in >> dog.yon_x; 
    in >> dog.yon_y; 
    in >> dog.yon_z;  
    return in; 
} 

Détails: const signifie "mon code ne modifiera pas cette variable". Mais le point entier d'une opération d'entrée est pour modifier la variable.

Vous pouvez surcharger ostream& operator<<(ostream&, const Dogru&); très bien, car une opération de sortie n'a pas besoin de modifier la variable.`

+0

donné oh je vraiment oublié qu'il .Thx beaucoup – user3578573