我是C ++的新手,在学习它时遇到了这个问题
所以我创建了此类
class A {
int num;
public:
//constructor
A(int num) {
this->num = num;
}
int getNum() {
return num;
}
//overload <<
friend ostream& operator << (ostream& os,A& a) {
os << a.getNum();
return os;
}
};
在主函数中,如果我使用cout<< A(1);
则会编译错误(Visual Studio 2017中的代码C2679)。
如何使它像cout<< int(1);
一样?我是否需要重载其他任何运算符?
答案 0 :(得分:4)
您的重载需要使用const A&
,否则匿名临时 A(1)
无法与其绑定。
答案 1 :(得分:1)
另一种方法是使operator <<
重载rvalue references
friend ostream& operator << (ostream& os, A&& a) {
os << a.getNum();
return os;
}