我遇到了重载<<的问题运营商。我试图找到一个答案,但似乎大多数人都没有实现覆盖。我只是在学习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类。无论哪种方式,它都没有用。有什么想法吗?
答案 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类的(标题)中。