7

現在、==演算子のオーバーロードされた関数を作成しています。私はリンクされたリストのhppファイルを作成しています。このオペレータをhppファイルで作業させることはできません。==関数のオーバーロード

私は現在、これを持っている:

template <typename T_> 
class sq_list 
{ 

bool operator == (sq_list & lhs, sq_list & rhs) 
{ 
    return *lhs == *rhs; 
}; 

reference operator *()  { 
     return _c; 
    }; 

}; 
} 

私は約10個のエラーを取得しますが、彼らエラーなどほとんどの繰り返し:

C2804:バイナリ '演算子==は' あまりにも多くのパラメータ
に C2333を持っています: 'sq_list :: operator ==':関数宣言のエラー。関数本体をスキップする
C2143:構文エラー: ';'がありません。 before '*'
C4430:型指定子がない - 想定されています。注:C++は、デフォルト-INT

をサポートしていない私は、周りの変更の事を試してみたが、この上の任意のヒントや支援が大幅に高く評価されて

上記のように、私はconstanlyと同じエラーを取得します。

+0

あなたはsqlistが必要です Flexo

+0

メンバー関数の場合、これは1つのアートを取り、 – Flexo

+0

@awoodlandを使用します。いいえ、そうではありません。クラステンプレート定義内では、テンプレート名だけで現在のテンプレートインスタンスを参照できます。とにかくOPのコードには 'T 'はありません。 –

答えて

7

メンバーオペレーターは、の1つだけ、という引数を持ちます。これは他のオブジェクトです。最初のオブジェクトはインスタンスそのものです:

template <typename T_> 
class sq_list 
{ 
    bool operator == (sq_list & rhs) const // don't forget "const"!! 
    { 
     return *this == *rhs; // doesn't actually work! 
    } 
}; 

この定義は実際には再帰的に呼び出されるため、実際には意味を持ちません。代わりに、return this->impl == rhs.impl;のようなメンバー操作を呼び出す必要があります。

0

インスタンスのメソッドが取得するように、クラス定義の一部として== overloadを宣言しています。したがって、最初に要求するパラメータlhsは既に暗黙的です。つまり、インスタンスのメソッド内でthisにアクセスできることを覚えておいてください。

class myClass { 
    bool operator== (myClass& other) { 
     // Returns whether this equals other 
    } 
} 

クラスの一部としてオペレータ==()メソッドは、「このオブジェクトは、他の人に自分自身を比較する方法を知っている」として理解されるべきです。

オペレータ==()をクラス外にオーバーロードして、2つの引数を受け取ることができます。ここを参照してください: http://www.learncpp.com/cpp-tutorial/94-overloading-the-comparison-operators/

0

http://courses.cms.caltech.edu/cs11/material/cpp/donnie/cpp-ops.html

比較演算子は非常に単純です。次のような関数シグネチャを使用して==最初に定義します。

bool MyClass::operator==(const MyClass &other) const { 
    ... // Compare the values, and return a bool result. 
    } 

どのようにMyClassオブジェクトを比較するかはあなたのものです。