-5

比較演算子を実装しようとしていますが、次のエラーが発生します

whole.cpp(384): エラー C2270: '==': 修飾子は非メンバー関数で
使用できませ
ん: '関数スタイルのキャスト' : '.' の右側として不正です オペレーター

問題を特定できないようですが、ここにコードがあります

これは、クラスの演算子の実装です

bool operator==(const DateC& p) const
{
    return ( DateC::DateC()== p.DateC() );
};

#include <assert.h>
int main(unsigned int argc, char* argv[])
{
    DateC f(29,33,11);

    DateC::testAdvancesWrap();
};

void DateC::testAdvancesWrap(void)
{
    DateC d;
    cout << "DateC::testAdvanceWrap()" << endl ;
    cout << "*********************" << endl << endl ;
    cout << "\tCHECK ADVANCE MULTIPLES:" << endl;
    cout << "\t------------------------" << endl;
    d.setDay(1);
    d.setMonth(12);
    d.setYear(1999); 
    prettyPrint(d);
    cout << "ACTION: set date 01-Dec-1999, advance, 31 days, 1 month and 1 year ->" << endl;
    d.advance(1,1,31);

    assert( d == DateC(1,2,2001) );

    cout << "SUCCESS" << endl;

    prettyPrint(d);
    cout << endl << endl;
}

残りの関数は正常に動作します。assert() のみです。

4

1 に答える 1

0

メンバー関数またはフリー関数として比較演算子を実装できます。実行しようとしているように自由関数として実装するには、2 つの引数 ( の左側=の値と の右側の値)を受け入れる必要があります=。以下の例は、これを正しく行う方法を示しています。

struct Date
{
    int variable_;
};

bool operator==(const Date& lhs, const Date& rhs)
{
    return lhs.variable_ == rhs.variable_;
}

比較演算子をメンバー関数として実装するには、 の右側のサイズの値である引数を 1 つだけ取る必要があります=。実行中の比較演算子を所有するオブジェクトは、 の左側の値です=。この場合、演算子は const 修飾されている必要があります。

struct Date
{
    int variable_;

    bool operator==(const Date& rhs) const
    {
        return variable_ == rhs.variable_;
    }
};

いずれの場合も、const右辺値 (一時値) を使用できるようにするには、引数を参照として使用する必要があります。

于 2013-06-16T23:20:55.463 に答える