`bool operator <(Contact&)'必须带两个参数

use*_*731 3 c++ comparison overloading operator-overloading operator-keyword

我有

class Conatact{
.....
bool operator<(Contact &c);
};

bool operator<(Contact &c)
{
     return this.getName<c.getName();

}
Run Code Online (Sandbox Code Playgroud)

它说`bool operator <(Contact&)'当我试图改变它有两个参数时必须正好拿两个参数

bool operator<(Contact &c)
{
     return this.getName<c.getName();

}
Run Code Online (Sandbox Code Playgroud)

它说它必须采取一个参数

das*_*ght 9

我认为你需要通过提供一个完全限定的名称向编译器表明它是一个成员实现:

bool Conatact::operator<(Contact &c)
{
     return this->getName() < c.getName();
}
Run Code Online (Sandbox Code Playgroud)

制作运营商const并制作运营商也是一个好主意Contact &c const.

如果没有作用域解析限定符,编译器会认为您正在定义一个"独立"运算符来比较联系人,在这种情况下,运算符确实需要采用两个参数:

bool operator<(const Contact &lhs, const Contact &rhs) {
    ...
}
Run Code Online (Sandbox Code Playgroud)