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では不可能ですか?
ご協力ありがとうございます。
を::比較し、あなたの何(a、b)は – HazemGomaa
質問? 'compare'は非静的メンバ関数です。非メンバ関数でそれを呼び出すと、インスタンスを呼び出す必要があります。それをメンバー以外の関数に変更したいですか?または静的メンバー関数ですか?または他にsth? – songyuanyao
あなたはあなたが探しているものの名前を知っている:静的メンバー関数。ここでの障害は何ですか。なぜ構文を理解するのに助けが必要ですか? – Cimbali