我试图为我的自定义类Fraction重载输出<<
运算符
但是我面对这个奇怪的错误:
此操作员功能的参数太多
我为此查看了示例,但我的实现几乎相同:
https://msdn.microsoft.com/en-us/library/1z2f6c2k.aspx
我正在使用visual studio 2015社区版
这是我现在的代码:
#pragma once
#include <ostream>
using namespace std;
class Fraction
{
double denominator_;
double numerator_;
public:
Fraction(const double& denominateur, const double& numerateur)
: denominator_(denominateur), numerator_(numerateur)
{
}
double getDenominator() const
{
return denominator_;
}
double getNumerator() const
{
return numerator_;
}
double getValue() const
{
return getNumerator() / getDenominator();
}
ostream& operator<<(ostream& output, const Fraction& frac ) const
{
output << frac.getNumerator() << "/" << frac.getDenominator();
return output;
}
};
有人可以找出问题所在吗?
答案 0 :(得分:1)
使它成为自由函数而不是成员函数。如果您需要访问该班级的私人成员,您可以将其变为朋友。出现错误,因为非静态成员函数隐式地将指向类实例的指针作为第一个参数。
实际上您编写的运算符将用作
Fraction f,g;
f.operator<<(std::cout,g);
但你想要的是
std::cout.operator<<(f);