2016-10-18 27 views
1

Fractionクラスのメンバ関数にアクセスしようとしていますが、これは2つのパラメータ、両方のFractionオブジェクトを取る "compare"と呼ばれます。 compare関数を呼び出す唯一の方法は、Fractionクラスのメンバーを経由することですmember.functionName構文を使用せずにメンバ関数にアクセスする方法C++?

bool operator==(Fraction a, Fraction b) { 
    if (compare(a, b) < 0) { // this line gives an error during compilation 
     // Do stuff 
    } 
    return true; 
} 

int Fraction::compare(Fraction a, Fraction b) { 
    // do stuff 
    return 0; 
} 

エラーが比較が呼び出されたラインで与えられ、それは次のようなメッセージ得られます:、私は次のようにその行を変更した場合

..\fraction.cpp:107:18: error: 'compare' was not declared in this scope

を例えば、私は、次のコードを持っていますできます。

if (a.compare(a, b) < 0) { 

比較を呼び出すための唯一の方法は、とにかく関数への入力パラメータであるとき、a.compareを行うことであることを冗長ようです。演算子のオーバーロード関数をフレンド関数にすることでこの問題を解決することができますが、非メンバ関数として実装するよう求められています。

この関数をstaticにする方法はありますか?Fraction.compare(a, b)と呼ぶことができますが、これはC++ 11では不可能ですか?

ご協力ありがとうございます。

+1

を::比較し、あなたの何(a、b)は – HazemGomaa

+0

質問? 'compare'は非静的メンバ関数です。非メンバ関数でそれを呼び出すと、インスタンスを呼び出す必要があります。それをメンバー以外の関数に変更したいですか?または静的メンバー関数ですか?または他にsth? – songyuanyao

+0

あなたはあなたが探しているものの名​​前を知っている:静的メンバー関数。ここでの障害は何ですか。なぜ構文を理解するのに助けが必要ですか? – Cimbali

答えて

4

さて、あなたは例の方法静的およびoperator ::
経由のアクセスにそれを宣言することができます:あなたは、静的メンバ関数を比較し、分数、それを呼び出すことができます

class Fraction { 
public: 
    static bool compare(int a, int b); 
}; 

bool Fraction::compare(int a, int b) 
{ 
    return a > b; 
} 

int main() 
{ 
    cout << boolalpha << Fraction::compare(5, 4) << '\n'; 
} 
+1

まさに私が必要としてくれた、すばらしい! – Michael

関連する問題