2014-04-27 130 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