Если вы посмотрите на объявление std::vector::erase
, оно будет:
iterator erase( const_iterator pos );
Как видите, аргумент является целым числом.Вы пытаетесь передать целое число в качестве аргумента.Таким образом, разрешение перегрузки не находит перегрузки с типом передаваемого аргумента.Вот что означает ошибка «нет соответствующей функции-члена для вызова« стирания »* .
Невозможно использовать std::vector::erase
без использования итератора.
Как бы это исправить, не используя итераторы
Вы можете перезаписать удаляемый элемент последним элементом, а затем вызвать pop_back
, чтобы удалить дубликат.И то, и другое можно сделать без итераторов.
Если вы хотите сохранить порядок, как erase
, перезапишите целевой элемент следующим.Затем переписать следующий с последующим, и так до конца вектора.Тогда pop_back
.Тем не менее, я бы порекомендовал использовать итераторы и erase
вместо этого.Нет необходимости усложнять программу, произвольно запрещая использование итераторов.