2015-07-06 3 views
0

У меня есть следующий класс:Использования станда :: any_of с лямбдой призвания перегруженного оператора равенства

Class Foo { 
public: 
    bool operator ==(const Foo& f); 
    ... 
private: 
    set<pair<int,int>> points; 
    ... 
} 

Перегруженный оператор равенство возвращает истину, если два объекта Foo имеет равные множества точек. Он работает, как и ожидалось, если я использую его как таковой:

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

Вы должны опубликовать компиляцию. – Barry

ответ

3

В вашем лямбда f является const. Поэтому вы не можете называть свой operator==, потому что ваш operator== не const. Поэтому исправьте это:

bool operator==(const Foo& f) const; 
Смежные вопросы