MS Visual c ++ 2010编译器告诉我运算符==有太多参数,但是 如果我只放一个,那就让它过去吧。这里发生了什么?我从Stroustrup的书中得到了这个功能,我很确定他知道如何在c ++中重载操作符。
class Book
{
public:
Book(){}
Book(long long isbn,string ttl, string athr, int cpyrght_dt)
:ISBN(isbn), title(ttl), author(athr), copyright_date(cpyrght_dt) {}
//...
const long long & Return_ISBN () const {return ISBN; }
bool operator==(const Book& a, const Book & b)
{
return a.Return_ISBN()==b.Return_ISBN();
}
private:
long long ISBN;
//....
};
答案 0 :(得分:12)
您将operator==
定义为方法(成员函数),因此它具有类型为this
的隐式Book*
参数。要么使用它,要么提升课外的定义。由于它不使用任何私人成员,我会做后者。
答案 1 :(得分:4)
双参数运算符重载超出了类定义。
class Book
{
...
};
bool operator==(const Book& a, const Book & b)
{
return a.Return_ISBN()==b.Return_ISBN();
}