错误 C2679:二进制“<<”:未找到采用 'RatNum' 类型的 right-hand 操作数的运算符(或没有可接受的转换)

error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'RatNum' (or there is no acceptable conversion)

我在重载 << 运算符时遇到问题。我已经尝试找到答案,但似乎大多数人都没有实施覆盖。我只是在学习 C++,但我相信这可能是一个范围问题。我正在尝试打印一个有理数(分数和整数)class,它有两个分子和分母成员。

Header 文件:

#ifndef RATMATH_H
#define RATMATH_H

using namespace std;

class RatMath
{

public:
    RatMath(void);

    virtual ~RatMath();

    friend ostream& operator<<(ostream &output, RatNum &resultObj);

};
#endif

在 RatMath class:

ostream& operator<<(ostream &output, RatNum &resultNum)
{
    int topNum = resultNum.getTopNum();
    int botNum = resultNum.getBotNum();

    output << topNum << "/" << botNum;
    return output;
}

然后在 GUI class 中从 int main() 调用它(在 header-not 中没有声明确定这是否是一个问题,但它之前工作正常) :

RatNum testObj = RatNum(1, 3);
cout << testObj;

我尝试将覆盖放在 GUI class 中以查看它是否是一个范围问题,但后来我不知道将 'friend' 声明放在哪里,因为 GUI class 未在 header 中定义。无论哪种方式,它都没有用。有什么想法吗?

你的函数有错误的类型:

friend ostream& operator<<(ostream &output, RatNum &resultObj);

应该是:

friend ostream& operator<<(ostream &output, **const** RatNum &resultObj);

您的好友声明

friend ostream& operator<<(ostream &output, const RatNum &resultObj);

应该放在 RatNum class 的 (header) 中,而不是放在 RatMath Class.

的 (header) 中