运算符过载<<
码:
std::ostream& operator<<(std::ostream& os, const BmvMessage& bm);
我没有看到任何不正确的东西,但它给出了以下错误:
错误:`std :: ostream&BMV :: BmvMessage :: operator <<(std :: ostream&,const BMV :: BmvMessage&)'必须采用恰好一个参数。
我不知道为什么会发生这种情况。 欢迎任何建议。 我以前做过这个,从来没有遇到过这个错误。 我也在网上查过,它看起来像:
ostream& operator<< (ostream& out, char c );`
让operator<<
在课外,使其成为一项免费功能。 如果需要访问private
部分,请将其作为班级的friend
。
运算符必须是一个自由函数,因为它的第一个参数与您的类不同。 一般来说,当你重载二元运算符Foo
,成员函数版本只接受一个参数, FOO(a, b)
表示a.Foo(b)
。
由于a << b
将调用a.operator<<(b)
,但a
是流,这对我们来说没有用处。
所以制作一个免费的功能,或者免费的朋友功能。 有一个公共的toString
成员函数可以帮助:
class Foo {
public:
std::string toString() const;
// ...
};
std::ostream & operator<<(std::ostream & o, const Foo & x) {
return o << x.toString();
}
您正在使用自由格式签名来定义成员函数。 成员函数有一个隐含的this
说法,所以你的情况为你的重载成员函数尝试operator <<
将导致在3个参数的函数:隐含this
, std::ostream&
操作系统和BmvMessage const&
BM。
您不能将流操作符定义为成员,因为第一个参数需要是流类。 相反,您将它们定义为免费功能,如果需要可能会有兴趣。
链接地址: http://www.djcxy.com/p/73101.html上一篇: operator overload <<
下一篇: How to properly overload the << operator for an ostream?