Как перегрузить оператор косвенного обращения? (C ++)

Я пытаюсь создать класс итератора как класс-член для класса списка и пытаюсь перегрузить оператор косвенного обращения (*) для доступа к списку, на который он указывает:

template<class T>
T list<T>::iterator::operator*(iterator& iter)
{
    return ((iter.lstptr)->current)->data;
}

гдеlstptr это указатель на список,current указатель на класс узла, а класс узла содержит элемент данныхdata типаT.

Итератор объявлен так:

template<class T>
class list
{
public:
class iterator;
};

template<class T>
class list<T>::iterator
{
//stuff
};

Я могу скомпилировать определение функции перегруженного оператора * отлично, но когда я пытаюсь сделать что-то вроде:

list<int> lst1;
lst1.add(6);
list<int>::iterator IT;
IT = lst1;
//everything above this point compiles fine
int a = *IT; //error here (line fourteen)

Ошибка, которую я получаю, говорит <1>, что я использую недопустимое косвенное указание, и <2>, что он не может преобразовать из list :: iterator в int. Обе ошибки происходят в строке четырнадцать.

Кто-нибудь знает, что я делаю неправильно и как правильно перегрузить оператор косвенного обращения?

NB. Если вам нужно увидеть больше кода, скажите мне, какую часть, потому что я не хочу помещать весь код здесь, потому что он содержит около 205 строк, и 204 из этих строк (я думаю) не имеют ошибок.

Ответы на вопрос(2)

Ваш ответ на вопрос