【发布时间】:2018-03-05 14:32:34
【问题描述】:
我尝试了使用类的重载运算符,这就是我所做的:
首先,vverloading '
class complex
{
friend ostream & operator<<(ostream &os, const complex &z);
// codes that worked!
}
ostream& operator<<(ostream &os, const complex &z) {// conditions}
然后,我想做类似于“>>”运算符的操作,允许使用“>>”从 istream 中提取类的对象。所以我遵循了 MSDN 的文档:
// Inside the class declaration:
friend istream& operator>>(istream &is, const complex &z);
// Outside the class, before main function:
istream& operator>>(istream &is, const complex &z)
{
is >> z.re >> z.im; // 're' and 'im' corresponds to real or imaginary numbers which are stored as doubles in each complex object
return is;
}
虽然这与 MSDN 中的示例代码格式相同,但这会导致编译错误:
error: invalid operands to binary expression ('istream'
(aka 'basic_istream<char>') and 'double')
is >> z.re >> z.im;
谁能帮我理解错误信息,或者如果你能说出我的代码中的错误,请指出我做错了什么。干杯。
【问题讨论】:
-
输入运算符必须使用非常量引用才能更新参数。
-
我很确定 MSDN 在第二个参数上没有
const。 -
谢谢!我已经解决了这个问题并编写了一个全面的解决方案来重载“>>”运算符。
标签: c++ class operator-overloading