重载运算符==比较2类

时间:2015-05-23 16:50:38

标签: c++ overloading comparison-operators

我是编程新手,我试图搜索课程列表中的元素,我这样做了:

string x;
cin >> x;
list<Person>::iterator findIter = std::find(ListPerson.begin(), ListPerson.end(), x);

但似乎我必须重载运算符==才能工作,我这样做了:

friend bool operator== (Person &P1, Person &P2);

bool operator== (Person& P1, Person& P2)
{
    return (P1.Name == P2.Name);
}

但它不起作用我总是遇到这个错误:c2678二进制&#39; ==&#39;没有找到哪个运算符采用Person类型的左手操作数。 谢谢你的帮忙 !

2 个答案:

答案 0 :(得分:0)

您的listen声明应该在类声明中。接下来,通过friend bool operator==引用代替,因为rvalues无法绑定到非const引用,并且std::find期望它与const引用的被比较元素。因此,const应该能够比较operator==引用,而非const引用则不会,因为它们会丢弃const限定符。要修复,请声明

const

实时工作示例here

答案 1 :(得分:0)

您是否尝试将参数声明为常量引用?比较运算符不需要有副作用。

以下适用于我,并打印yeah

#include <iostream>
using namespace std;

struct P {
    const int x;

    P(int x) {
        this->x = x;
    }
};

bool operator== (const P & p1, const P &p2) {
    return p1.x == p2.x;
}

int main()
{
    P x(0), y(0), z(1);

    if (x == y) {
        cout << "yeah" << endl;
    }
    if (y == z) {
        cout << "nope" << endl;
    }
}

当然,如果要对私有实例变量进行比较,可能需要将operator==声明为友元函数。

class P {
    int x;

  public:
    P(int x) {
        this->x = x;
    }

    friend bool operator== (const P &p1, const P &p2);
};