这是我的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 >> "("
不正确。不清楚你的意图是什么,但你无法解读字符串的字面意思。您只能读取变量(或多或少(。
顺便说一句,这不是在那一行引发的异常,而是从那一行生成的错误消息。例外是完全不同的东西。