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

7

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

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

编译器显示运算符<<中的类型不匹配。

重载的+返回一个整数对象,但为什么不能打印出来呢?

"Test.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;
}

"Integer.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;
}

"Integer.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);

提前感谢您。


你的 operator << 函数的签名是问题所在。 - David G
1个回答

12
将临时对象绑定到非const引用是非法的:
cout << (int1 + int2) << endl; // The result of the '+' is temporary object.

将您的 operator<< 的参数更改为 const Integer& 可以进行更正。
ostream& operator<<(ostream& output, const Integer& integer);
                                   //^^^^^

有趣...我刚把原始代码放入VS2012,它就像写的一样工作了。你有什么想法为什么? - aardvarkk
这将需要在class Integer的适当位置添加一些const - user645280
2
@aardvarkk,VS具有非标准扩展,这是其中之一(有一个标志可以禁用它们,但我无法立即记住它)。 - hmjd
@hmjd 不用担心,这是其中一个与标志无关的“扩展”。 - Casey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接