我有以下课程:
Class Foo {
public:
bool operator ==(const Foo& f);
...
private:
set<pair<int,int>> points;
...
}
如果两个Foo对象具有相同的点集,则重载的等于运算符返回true。如果我这样使用它,它会按预期工作:
Foo a = Foo();
Foo b = Foo();
if (a == b) ...
我的问题是,为什么以下编译失败?
vector<Foo> foos = ...
Foo c = ...
if (any_of(foos.begin(),foos.end(),[c](const Foo& f) { return (f == c); }))
{
// stuff
}
答案 0 :(得分:3)
在你的lambda中,f
是const
。因此,您无法在其上调用operator==
,因为operator==
不是const
。所以解决这个问题:
bool operator==(const Foo& f) const;