Ваш код, к сожалению, полный беспорядок.
Что запрещает компиляцию, это, вероятно, следующее:
class iterator : public std::iterator<std::random_access_iterator_tag, T*>
Это говорит о том, что когда вы выполняете *iterator
, это дает T*
. Но посмотрите, что на самом деле возвращает operator*
:
T operator*() const
Я могу сделать его компиляцией, изменив их на:
class iterator : public std::iterator<std::random_access_iterator_tag, T>
и
T& operator*() const
(в дополнение к многочисленным другим изменениям, поскольку GCC, похоже, не очень нравится)
/*Comparing values of two iterators*/
bool operator<(const iterator& obj)
{
return **itData_ < **obj.itData_;
}
Это тоже неправильно. Он должен быть связан с operators ==
и !=
, то есть сравнивать не значения, а итераторы. (К счастью для вас, я сомневаюсь, std::sort
фактически когда-либо использует этот метод.)
T** operator++()
{
return ++itData_;
}
T** operator--()
{
return --itData_;
}
Они должны возвращать ссылку на сам итератор (опять же, возвращаемое значение, скорее всего, не используется библиотекой).