Я обновился до более нового компилятора C++ (перешел с Visual C++ 6.0 на Visual C++ 2015) и работаю над преобразованием класса шаблона Vector, чтобы он был совместимым. Одна ошибка, с которой я сталкиваюсь, связана с методом vector::erase и типом ввода.
Фрагмент класса шаблона:
template<class Type> class Vector { public: typedef Type* iterator; typedef const Type* const_iterator; ... iterator erase( const_iterator iBegin ); iterator erase( const_iterator iBegin, iEnd ); private: VectorImpl<Type>* m_pImpl; }; ... template <typename Type> typename Vector<Type>::iterator Vector<Type>::erase( typename Vector<Type>::const_iterator iBegin ) { return m_pImpl->erase( iBegin ); };
...
Ошибка:
C2440: «инициализация»: невозможно преобразовать «const int*» в «std::_Vector_const_iterator>>»
Мне удалось преобразовать итератор std::vector в int*, разыменовав итератор, но я не уверен, как сделать обратное:
template <typename Type> typename Vector<Type>::const_iterator Vector<Type>::begin()
{
Vector<Type>::const_iterator begin = &(*m_pImpl->begin());
return begin;
};
Вопрос. Можно ли преобразовать const int* в std::vector const_iterator?
const_iterator
, указывающий на что-то, вам понадобится еще один итератор или сам контейнер. - person bipll   schedule 11.09.2018...
явно подозрительны. Опубликуйте наименьший пример кода, который вы можете создать, который показывает проблему. Например, хотя в вашем вопросе упоминаетсяstd::vector const_iterator
, в этом коде нет ничего, что упоминало быstd::vector
или его итераторы. - person Pete Becker   schedule 11.09.2018std::vector
? - person Lightness Races in Orbit   schedule 11.09.2018