2012-01-23 11 views
3

Possible Duplicate:
Operator overloading outside class機能は、C++

に私はCと素晴らしいではありませんよ++が、私は演算子オーバーロードの多くを使用するカスタムVectorクラスを作成する使命を帯びてきました。私はそのうちの一つをどうやってやるのか苦労している。 クラスには、次のための機能を提供する必要があります

v3 = v2 * 2.0f; 
v3 = 2.0f * v2; 

を私は正常に*演算子をオーバーロードすることによって最初のものを実装しました。私はどのように2番目のものについて行くのか分からない。私は*演算子を再度オーバーロードする必要があることを知っていますが、私はベクトルクラスの内側にあるはずがないと思います。私の教授がそれを説明した日、私は授業中に欠席していました。その後私が彼に話したとき、彼はクラスの外にいる必要があると言いました。問題は、どのように動作するのか分かりません。どんな指針も素晴らしいでしょう! Vector.h:64:エラー:「このよう「constのベクトル」を渡して私には理にかなって、私はそれを追加したとき、私は今、コンパイラからこのエラーを取得しています

編集 -

@Fede_Reghe 'float Vector :: operator'の引数は修飾子を破棄します

ヘッダーには、これらの2行が*オーバーロードを参照しています。 ベクトル演算子*(float); friendベクトル演算子*(float、const Vector &);

次に、x、y、z値の浮動小数点数を返すように[]をオーバーロードしました。これはヘッダーで次のようになります。 float operator [](int);私は完全にエラーメッセージが何を意味するのか理解していない

Vector operator * (float f,const Vector& v2) 
{ 
    float newX = v2[0] * f; 
    float newY = v2[1] * f; 
    float newZ = v2[2] * f; 
    Vector newVector(newX, newY, newZ); 
    return newVector; 
} 

:クラスの

外では、私はこのような友人*過負荷を定義しました。

答えて

2

operator *()という2つの引数の実装が必要です。 Hereは、一般化できるoperator +()でそうする例です。

3

演算子をクラス外にオーバーロードし、クラスのフレンドとして宣言する必要があります。 例:

class Vector { 
    // ... 
    friend Vector operator*(float, Vector); 
}; 

Vector operator*(float num1, Vector num2) 
{ 
    // ... 
}