2015-05-23 3 views
0

Я новичок в программировании и я пытаюсь найти элемент в списке класса, и я сделал это:перегрузка оператора == сравнения 2 класс

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 двоичную «==» ни один оператор не найден, который принимает левого операнда типа лица. Спасибо за помощь!

+1

Какой тип 'x'? Что бы это ни было, вам нужно иметь оператор ==, который принимает «Лицо» как lhs, а тип 'x' как rhs – sp2danny

+0

ah извините, это строка, большое спасибо: D похоже, что она работает – Smiith

ответ

0

Ваше объявление friend bool operator== должно быть внутри декларации класса. Затем перейдите к ссылке const, так как rvalues ​​не могут привязываться к ссылкам не const, а также std::find ожидает, что его элемент сравнения сравним с const. Таким образом, ваш operator== должен уметь сравнивать const ссылок, а не const те не будут делать, так как они откажутся от спецификаторов const. Чтобы исправить, объявить

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

Рабочий рабочий пример here.

+0

i made это изменение, но оно все еще не работает – Smiith

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); 
}; 
+0

Я сделал это изменение, но оно все еще не работает – Smiith

+0

Какое изменение? Ссылка const или функция друга? Также, пожалуйста, уточните, почему это не работает. Сообщения об ошибках? – Dacav