我想重载<<我已经定义的方法显示我的类的运算符。我得到一个与运算符<<不匹配的编译器错误。
这是一个最小的例子:
#include <iostream>
using namespace std;
class MyClass
{
public:
MyClass()
{}
ostream& display(ostream& out) const
{
out << "Display message" << endl;
return out;
}
ostream& operator<< (ostream& out) const
{
ostream& output = display(out);
return output;
}
};
int main()
{
MyClass C1;
cout << C1 << endl;
return 0;
}
虽然C1.display(cout);
没有问题!
答案 0 :(得分:2)
您已将operator<<
定义为MyClass
的成员函数。因此,你必须像调用成员函数一样调用它(左边的对象,右边的参数),如下所示:
C1 << cout;
但这似乎并不是你想要的。您可能希望能够像这样调用它:
cout << C1;
在这种情况下,该功能不能成为MyClass
的成员。它必须是cout
,或 自由函数(在任何类之外)的成员。在这种情况下,必须是一个免费功能,因为您无法更改cout
的定义。
因此,要将operator<<
声明为自由函数,它需要有两个参数(左侧和右侧):
ostream& operator<< (ostream& out, const MyClass& c) { ... }
现在你可以用左边的ostream
和右边的MyClass
对象来调用它,如下所示:
cout << C1;