可能重复:
Operator overloading
我没有找到任何可以帮助我解决这个问题的事情......
我正试图过载<< operator
,这是我的代码:
ostream& Complex::operator<<(ostream& out,const Complex& b){
out<<"("<<b.x<<","<<b.y<<")";
return out;
}
这是H文件中的声明:
ostream& operator<<(ostream& out,const Complex& b);
我收到此错误:
error: std::ostream& Complex::operator<<(std::ostream&, const Complex&) must take exactly one argument
我做错了什么?为什么? 感谢
答案 0 :(得分:10)
您的operator <<
应该是免费功能,而不是Complex
类成员。
如果你做了operator <<
类成员,它实际上应该采用一个参数,该参数应为stream
。但那时你将无法像
std::cout << complex_number;
但
complex_number << std::cout;
相当于
complex_number. operator << (std::cout);
正如您所注意到的,这不是常见做法,这就是为什么operator <<
通常被定义为自由函数的原因。
答案 1 :(得分:1)
class Complex
{
int a, b;
public:
Complex(int m, int d)
{
a = m; b = d;
}
friend ostream& operator<<(ostream& os, const Complex& complex);
};
ostream& operator<<(ostream& os, const Complex& complex)
{
os << complex.a << '+' << complex.b << 'i';
return os;
}
int main()
{
Complex complex(5, 6);
cout << complex;
}
更多信息here
答案 2 :(得分:0)
如上所述,流重载需要是在类之外定义的自由函数。
就个人而言,我更喜欢远离friend
发货并转而使用公共会员功能:
class Complex
{
public:
std::ostream& output(std::ostream& s) const;
};
std::ostream& operator<< (std::ostream& s, const Complex& c)
{
return c.output(s);
}