我是编程新手,我试图搜索课程列表中的元素,我这样做了:
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类型的左手操作数。 谢谢你的帮忙 !
答案 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);
};