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:構文エラー:';'がありません '*'の前
C4430:型指定子がありません-intと見なされます。注:C++はdefault-intをサポートしていません

状況を変えてみましたが、常に上記と同じエラーが発生します

これに関するヒントや支援は大歓迎です。

4

3 に答える 3

7

メンバー演算子には、もう1つのオブジェクトである引数が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;

于 2012-02-18T00:55:29.193 に答える
0

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

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

クラスの一部としてのoperator==()メソッドは、「このオブジェクトは他のオブジェクトと比較する方法を知っている」と理解する必要があります。

クラスの外でoperator==()をオーバーロードして、2つの引数を受け取ることができます。それがより理にかなっている場合は、両方のオブジェクトが比較されます。ここを参照してください:http: //www.learncpp.com/cpp-tutorial/94-overloading-the-comparison-operators/

于 2012-02-18T00:57:29.750 に答える
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 オブジェクトを比較する方法はすべて独自のものです。

于 2012-02-18T01:34:57.560 に答える