我爲我的大學作業寫了一個理性的類。>>操作符重載函數無限遞歸
class Rational
{
friend std::istream &operator >>(std::istream &, const Rational &);
friend std::ostream &operator <<(std::ostream &, const Rational &);
public:
...
private:
int numerator;
int denominator;
}
istream &operator >>(istream &istm, const Rational &num){
istm>>num.numerator>>num.denominator;
return istm;
}
但是>>重載函數似乎循環無限。然後核心轉儲...
我很快發現我已經添加了「const」給Ratoinal & num意外。
我的問題是,爲什麼
istm>>num.numerator>>num.denominator;
編譯成功,但成爲一個無限循環?
,並請解釋以下結果......感謝
const int i;
cin>>i; //compile error
int c;
const int &a=c;
cin>>a; //pass
你確定它是一個無限循環?還是隻是在終端等待輸入'istream'? – Yuushi 2013-05-10 05:26:00
對於第二個問題,您可以嘗試刪除您的'operator >>'重載,並查閱john的答案以獲取更多信息。 – Nbr44 2013-05-10 05:39:36
對不起蒂姆,但你所描述的只是不可能與所示的代碼。請嘗試編寫和發佈一些代碼來重現問題。你會看到上述兩種情況都會產生編譯錯誤。也許你的「症狀」來自其他原因,比如在你誤認爲一個成功的編譯失敗等錯誤後,運行一個過時的二進制文件和其他一些錯誤。無論如何,我建議關閉它作爲「不是一個真正的問題」...... – 2013-05-10 05:58:10