2008-11-24 2 views
2

У меня есть функция, которая ищет контейнер STL, а затем возвращает итератор, когда он находит позицию, однако я получаю некоторые смешные сообщения об ошибках, могу сказать, что я делаю неправильно?Возвращение итератора

Функция:

std::vector<CClass>::iterator CClass::SearchFunction(const std::string& strField) 
{ 
... 

    return it; 

... 
} 

Ошибка:

error C2664: 'std::_Vector_iterator<_Ty,_Alloc>::_Vector_iterator(const std::_Vector_iterator<_Ty,_Alloc> &)' : cannot convert parameter 1 from 'std::_Vector_const_iterator<_Ty,_Alloc> *__w64 ' to 'const std::_Vector_iterator<_Ty,_Alloc> &' 

ответ

6

Ваша функция поиска возвращает const_iterator. Вы должны либо вернуть один и тот же тип, т. Е. std::vector<CClass>::const_iterator, либо передать его std::vector<CClass>::iterator, если вы хотите, чтобы вызывающий абонент смог изменить найденный элемент через итератор.

EDIT: после просмотра вашего обновления, похоже, проблема в том, что ваш итератор (он) имеет другой тип, чем функция возврата функции. Они должны быть одинаковыми.

std::vector<CClass>::iterator it; 
+0

Спасибо! Я знал, что это что-то глупое. :) – Konrad 2008-11-24 12:29:34

0

Похоже, что у вас перепутаны ваши const_iterators. Пожалуйста, напишите больше кода, в частности, как вы объявляете свой итератор.

0

Вы также должны посмотреть на функцию std :: find_if(). Это может быть более чистый способ сделать это.

Смежные вопросы