C++ | cout, 打印返回的对象

标签 c++ operator-overloading cout

我遇到了一个问题,我无法通过 cout 打印返回的对象。

我觉得很难描述,所以我写了一个非常基本的程序来展示我的问题。

编译器说 Type mismatch in operator<<.

重载的+返回一个Integer对象,为什么打印不出来?

"测试.cpp"

#include <iostream>
#include "Integer.h"
using namespace std;
int main() {
Integer int1(5);
Integer int2(2);
cout << (int1 + int2) << endl;  // Here it fails
cout << int2 << endl;           // Works
return 0;
}

“整数.cpp”

#include "Integer.h"
Integer::Integer(int integer) {
 this->integer = integer;
}
int Integer::get_integer() 
return integer;
}
Integer Integer::operator +(Integer& integer) {
return Integer(this->integer + integer.get_integer());
}
ostream& operator<<(ostream& output, Integer& integer) {
output << integer.get_integer();
return output;
}

“整数.h”

#include <iostream>
using namespace std;
class Integer {
private:
int integer;
public:
Integer(int integer);
int get_integer();
Integer operator+(Integer& integer);
};
ostream& operator<<(ostream& output, Integer& integer);

提前致谢

最佳答案

将临时对象绑定(bind)到非常量引用是非法的:

cout << (int1 + int2) << endl; // The result of the '+' is temporary object.

要更正,请更改您的 operator<< 的参数到 const Integer& :

ostream& operator<<(ostream& output, const Integer& integer);
                                   //^^^^^

关于C++ | cout, 打印返回的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20411092/

相关文章:

c++ - 即使程序刚刚启动,是否也可以始终捕获信号?

c++ - 这段代码会发生什么? (执行一个字符缓冲区)

c++ - 尝试打印变量。程序崩溃

c++ - 有什么办法可以用 base64 计算出来吗?

c++ - 如何解析istringstream C++?

C 代码中的 C++ 异常处理

c++ - Qt 选项卡顺序键

C++ 运算符用指针重载

c++ - 重载 * 运算符以同时在右侧和左侧工作

c++ - 推断 operator+ 和其他运算符的(模板化)返回类型