2014-04-27 88 views
-3

我想补充>>超载我的课,但是当我编译,编译器给了我这个错误:C++重载>>运算

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') 

我做了<<没有问题超载,但>>它不是加工。

我的代码的一部分:

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; 
    } 

回答

1

您需要修改的dog状态,这样

istream& operator>> (istream &in, const Dogru &dog) 
           // ^^ const should be removed 
重载 <<操作

使用const参考

3

你不能把将值读入const对象。删除const

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

详情:const的意思是 “我的代码不会改变这个变量”。但是输入操作的整点是来更改变量。

可以重载ostream& operator<<(ostream&, const Dogru&);就好了,因为输出操作并不需要改变给定variable.`

+0

哦,我真的忘了.Thx多 – user3578573