标题说全部。我重载了运算符<<正如互联网上的每个人都说的那样,但我仍然为无效的运营商犯了那个愚蠢的错误。我做错了什么?这是我的代码:
#include <iostream>
#include <cstdio>
using namespace std;
class Calc {
private:
union _Print_Datatypes {
int I;
double D;
string S;
char C;
};
public:
int i;
void Sum(long double _a, long double _b) {
return _a + _b;
}
void Sub(long double _a, long double _b) {
return _a - _b;
}
void Div(long double _a, long double _b) {
return _a / _b;
}
void Mult(long double _a, long double _b) {
return _a * _b;
}
};
std::ostream &operator<<(std::ostream &os, Calc const &m) {
return os << m.i;
}
int main() {
Calc _calc;
cout << _calc.Sum(2,2);
}
答案 0 :(得分:2)
cout << _calc.Sum(2,2);
Sum()
方法的返回类型为void
。显然,operator<<
不适用于void
。
您需要更改Sum()
等,以便返回Calc &
,并让他们返回*this
。
答案 1 :(得分:1)
即使没有<<
:
main.cpp:17:9: error: void function 'Sum' should not return a value [-Wreturn-type]
return _a + _b;
^ ~~~~~~~
宣布您的函数返回void
。