-5

我正在尝试实现比较运算符,但出现以下错误

whole.cpp(384): 错误 C2270: '==' : 非成员函数上不允许修饰符
Whole.cpp(384): 错误 C2805: 二进制 'operator ==' 的参数
太少 whole.cpp(384): 错误 C2274 : 'function-style cast' : '.' 的右边是非法的 操作员

我似乎无法确定问题,所以这里是代码

这是类中的运算符实现

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

您可以将比较运算符实现为成员函数或自由函数。要将它实现为您尝试执行的自由函数,您需要接受两个参数 - 左侧=的值和右侧的值=。下面的示例显示了如何正确执行此操作。

struct Date
{
    int variable_;
};

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

要将比较运算符实现为成员函数,您只需要采用一个参数,它是右侧 size 的值=。拥有正在执行的比较运算符的对象是 的左侧的值=。在这种情况下,运算符应该是 const 限定的。

struct Date
{
    int variable_;

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

在所有情况下,该参数都应被视为const允许使用右值(临时值)的参考。

于 2013-06-16T23:20:55.463 回答