操作员>>过载:"cannot bind 'std::istream {aka std::basic_istream<char>}' lvalue to 'std::ba



这是我的fraction类:

class fraction { // type definition
int num;
int denom;
ostringstream sstr;
public:
fraction(int c=0, int d=1) :
num(c), denom(d)
{ sstr = ostringstream(); }
fraction(const fraction &f) : num(f.num), denom(f.denom) { /*void*/ }
friend ostream& operator<<(ostream &os, const fraction &f){
os << "(" << f.num << "/" << f.denom << ")"; 
return os;
}
friend istream& operator>>(istream &is, const fraction &f){
is >> "(" >> f.num >> "/" >> f.denom >> ")"; // Exception thrown on this line on "is >>"
return is;
}

过载operator<<有效,但operator>>抛出错误:

无法将"std::istream{aka std::basic_stream<char>}"lvalue绑定到"std::basic_stream<char>amp&'

我看过SO上的其他问题,但仍然不知道为什么会这样。我认为这可能与指针有关,但我一无所知。请注意,我对C++真的很陌生,所以我的代码中可能有一些明显的缺陷,请在评论中指出。

移除const:

friend istream& operator>>(istream &is, fraction &f){

显然,由于operator>>正在修改f,所以它不应该是const

另一方面,operator<<中的const是正确的,因为该函数不会修改f

此外,is >> "("不正确。不清楚你的意图是什么,但你无法解读字符串的字面意思。您只能读取变量(或多或少(。

顺便说一句,这不是在那一行引发的异常,而是从那一行生成的错误消息。例外是完全不同的东西。

最新更新