Я пытаюсь создать класс итератора в качестве члена класса для класса список, и я пытаюсь перегрузить оператор разыменования (*) для доступа к списку он, указывая на:Как перегрузить оператор косвенности? (C++)
template<class T>
T list<T>::iterator::operator*(iterator& iter)
{
return ((iter.lstptr)->current)->data;
}
где lstptr
является указателем на список, current
является указателем на класс узла, а класс node содержит элемент данных 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> что он не может преобразовать из списка :: iterator в int. Обе ошибки встречаются на четырнадцатой строке.
Кто-нибудь знает, что я делаю неправильно, и как я могу правильно перегрузить оператора косвенности?
NB: Если вам нужно увидеть больше кода, скажите мне, какая часть, потому что я не хочу размещать весь код здесь, потому что он имеет 205 строк, а 204 из этих строк не (я думаю) есть ошибки.
Возможно, вы имели в виду "list :: iterator IT;" - это должен быть «список :: iterator IT;», правильно? –
leander
@leander: да, его список в действительном коде, я просто испортил ввод его в моем примере. –
2009-05-20 23:16:05