Я пытаюсь создать класс итератора как класс-член для класса списка и пытаюсь перегрузить оператор косвенного обращения (*) для доступа к списку, на который он указывает:
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 из этих строк (я думаю) не имеют любые ошибки.