Предполагая, что у вас есть объявление второй функции перед первой функцией, основная проблема заключается в том, что вы передаете строки по ссылке const
.
Это означает, что единственными перегрузками begin()
и end()
, к которым у вас есть доступ, являются версии const, которые возвращают std::string::const_iterator
, а не std::string::iterator
.
Соглашение для итераторов заключается в том, что конечный итератор указывает один за конец диапазона и не может быть разыменован - разумеется, если вы передаете str.end()
в качестве параметра end
. Это означает, что *begin == *end
недопустимо, вам нужно сначала уменьшить значение end один раз. У вас также будет проблема с диапазонами с нечетным числом элементов. При выполнении ++begin
и --end
без дальнейшей проверки ваши итераторы могут пересекаться в рекурсии, а не вызывать условие begin == end
.
Также обратите внимание, что для максимальной переносимости глобальные идентификаторы не должны начинаться с подчеркивания.