снова find с error
От: Аноним  
Дата: 23.07.05 22:23
Оценка:
Следуя 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.

Исправлено форматирование. Для формата РСДН заменять < на &lt;, > на &gt; и т.п. не нужно. -- ПК
Re: снова find с error
От: Павел Кузнецов  
Дата: 23.07.05 23:44
Оценка:
Здравствуйте, Аноним, Вы писали:

А>
А>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.
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.