C++ 重载>>运算符

c++ overloading >> operator

本文关键字:gt 运算符 重载 C++      更新时间:2023-10-16

我想把>>重载添加到我的类中,但当我编译它时,编译器会给我这个错误:

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

不能将读取的值放入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&);,因为输出操作不需要更改给定的变量

您需要修改dog的状态,以便

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

使用const引用重载<<运算符