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

Piu*_*sch 5 c++ cout operator-overloading

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

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

编译器在运算符<<中表示类型不匹配.

重载+返回一个Integer对象,但为什么不能打印?

"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;
}
Run Code Online (Sandbox Code Playgroud)

"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;
}
Run Code Online (Sandbox Code Playgroud)

"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);
Run Code Online (Sandbox Code Playgroud)

提前致谢

hmj*_*mjd 8

将临时对象绑定到非const引用是非法的:

cout << (int1 + int2) << endl; // The result of the '+' is temporary object.
Run Code Online (Sandbox Code Playgroud)

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

ostream& operator<<(ostream& output, const Integer& integer);
                                   //^^^^^
Run Code Online (Sandbox Code Playgroud)

  • @aardvarkk,vs有非标准扩展,这是其中之一(有一个标志可以禁用它们,但我不记得它的顶部). (2认同)