即使我重载了`operator<<`,也不能对类使用`cout`

时间:2017-02-24 13:20:03

标签: c++ class operator-overloading

标题说全部。我重载了运算符<<正如互联网上的每个人都说的那样,但我仍然为无效的运营商犯了那个愚蠢的错误。我做错了什么?这是我的代码:

#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);
}

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