assert()函数抛出错误的操作符错误

时间:2013-06-16 20:44:14

标签: c++

我得到的错误是

whole.cpp(384): error C2270: '==' : modifiers not allowed on nonmember functions
whole.cpp(384): error C2805: binary 'operator ==' has too few parameters
whole.cpp(384): error C2274: 'function-style cast' : illegal as right side of '.' operator

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

这是该类中的运算符实现      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()

1 个答案:

答案 0 :(得分:3)

创建自己的类时,如果要比较它们,则需要为它们创建运算符。我们假设你想比较一个Person类的2个实例。

一个人由一个字符串和一个int - 姓氏和身高组成。

我们希望按照他们的身高来比较人,所以我们需要告诉编译器如何做到这一点。 一个例子:

class Person
{
    string lastname;
    int height;

    bool operator == (const Person& p) const
    {
        return (this->height == p.height);
    }

};

编辑:

我认为你误解了我的例子,你只能比较编译器知道如何比较的事情。您的日期实现可能有整数,因此如果要检查是否相等,则必须检查所有字段。

使用this->可以访问该功能中的其他对象字段。