我为我的大学作业写了一个理性的类。>>操作符重载函数无限递归
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