重载运算符<< :此操作员功能的参数太多

时间:2016-05-10 13:17:46

标签: c++ operator-overloading

我试图为我的自定义类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;
        }
};

有人可以找出问题所在吗?

1 个答案:

答案 0 :(得分:1)

使它成为自由函数而不是成员函数。如果您需要访问该班级的私​​人成员,您可以将其变为朋友。出现错误,因为非静态成员函数隐式地将指向类实例的指针作为第一个参数。

实际上您编写的运算符将用作

Fraction f,g;
f.operator<<(std::cout,g);

但你想要的是

std::cout.operator<<(f);