Следуя
Centaur пишу:
struct D {int x; int y;};
class XEqualTo : public std::unary_function<D, bool>
{
public:
XEqualTo(int x) : x_(x) {}
bool operator()(const D& d) const
{
return d.x == x_;
}
private:
int x_;
};
vector<D> v;
int main()
{
for(int i=0;i<4;i++)
{
D temp;
temp.x=i;
temp.y=i*i;
}
find(v.begin(),v.end(),XEqualTo(2));
return 0;
}
Компилятор ругается так:
test3.cpp:33: instantiated from here
/usr/include/c++/3.3.3/bits/stl_algo.h:208: error: no match for 'operator==' in
'(&__first)->__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator*
[with _Iterator = D*, _Container = std::vector<D, std::allocator<D> >]() ==
__val'
Как быть? В строке 33 find.
Исправлено форматирование. Для формата РСДН заменять < на <, > на > и т.п. не нужно. -- ПК
Здравствуйте, Аноним, Вы писали:
А>А>class XEqualTo : public std::unary_function<D, bool>
А>{
А> bool operator()(const D& d) const
А>. . .
А> find(v.begin(),v.end(),XEqualTo(2));
А>
Вызываем функцию find, которая ищет в последовательности
элемент, переданный в качестве третьего аргумента.
А>Компилятор ругается так:
А>А>test3.cpp:33: instantiated from here
А>/usr/include/c++/3.3.3/bits/stl_algo.h:208: error: no match for 'operator==' in
А> '(&__first)->__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator*
А> [with _Iterator = D*, _Container = std::vector<D, std::allocator<D> >]() ==
А> __val'
А>
Перевожу. Говорит, что у разыменованного итератора (читай, класс D) нет операции сравнения с XEqualTo. Собственно, читай выше.
А>Как быть? В строке 33 find.
Вот и компилятор об этом же, хоть и не слишком понятно
Он намекает, что нужно вместо find написать
find_if.
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен