2016-05-10 20 views
0

私は私のカスタムクラスフラクション演算子オーバーロード<<:この演算子の機能のためにあまりにも多くのパラメータ

ための出力<<演算子をオーバーロードしようとしているが、私はこの奇妙なエラーに直面している:

too many parameters for this operator function

私はそのための例を見て、私はほぼ同じ実装を持っている:

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

というタイトルのセクションを参照してくださいであることになります(ストリームI/Oのために使用される)ビットシフト演算子を – NathanOliver

答えて

1

メンバー関数ではなく、自由な関数にします。クラスのプライベートメンバーにアクセスする必要がある場合は、それを友人にすることができます。非静的メンバ関数は、最初のパラメータとして暗黙的にクラスインスタンスへのポインタを取得するため、エラーが表示されます。

実際にあなたが書いたオペレータは

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

として使用しかし、あなたが望むことは

std::cout.operator<<(f); 
関連する問題