如何重载<<
运算符?从我收到的错误来看,std::cout
似乎不知道如何使用<<
。
这是一堂课:
// uint64_t UPPER, LOWER;
std::ostream & operator<<(std::ostream & stream){
if (UPPER)
stream << UPPER;
stream << LOWER;
return stream;
}
我得到的error: no match for 'operator<<' in 'std::cout << test'
似乎没有意义。
编辑:
这两个都没有:
std::ostream & operator<<(std::ostream & stream, uint128_t const & val){
if (val.upper())
stream << val.upper();
stream << val.lower();
return stream;
}
也不是:
std::ostream & operator<<(std::ostream & stream, uint128_t val){
if (val.upper())
stream << val.upper();
stream << val.lower();
return stream;
}
正在改变错误。
答案 0 :(得分:3)
<<
运算符有两个参数,一个左侧和一个右侧。因此,您必须使用两个参数定义函数:
std::ostream operator<<(std::ostream &os, const MyClass &obj);
就我记忆而言,你必须在课堂定义之外定义它。在类定义中,您只能使用将该类作为左侧的运算符。
答案 1 :(得分:2)
您通常希望operator<<()
重载是一个'自由函数'(在您的类之外),因此它可以自然地绑定到流:
// this is outside your class definition
std::ostream& operator<<(std::ostream& os, const myclass& rhs)
{
// whatever...
return os;
}
然后在你的课堂内,如果需要你宣布它为friend
,这样它就可以进入班级内部:
friend std::ostream& operator<<(std::ostream& os, const myclass& rhs);
将此作为friend
(某些人认为打破封装)的替代方法是在您的类中使用公共函数将其自身输出到流并在{{1}中调用它过载:
operator<<()
答案 2 :(得分:1)
operator<<
需要两个参数:
std::ostream& operator<<(std::ostream& stream, type_you_want_output const& thing)