错误C2679:二进制'<<' :找不到带有'RatNum'类型右手操作数的运算符(或者没有可接受的转换)

时间:2015-10-11 20:40:06

标签: c++ overloading

我遇到了重载<<的问题运营商。我试图找到一个答案,但似乎大多数人都没有实现覆盖。我只是在学习C ++,但我相信它可能是一个范围问题。我正在尝试打印出一个Rational Number(分数和整数)类,它有两个成员用于分子和分母。

标题文件:

#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课程中的

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

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

然后从int main()中调用它,在GUI类中(未在标题中声明 - 不确定这是否是一个问题,但之前它正常工作):

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

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

2 个答案:

答案 0 :(得分:0)

您的功能类型错误:

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

应该是:

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

答案 1 :(得分:0)

你朋友的宣言

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

应放在RatNum类的(标题)中,而不是放在RatMath类的(标题)中。