Estoy tratando de crear una clase de iterador como una clase miembro de una clase de lista, y estoy tratando de sobrecargar el operador de indirección (*) para acceder a la lista que está señalando:¿Cómo sobrecargar el operador de indirección? (C++)
template<class T>
T list<T>::iterator::operator*(iterator& iter)
{
return ((iter.lstptr)->current)->data;
}
donde lstptr
es un puntero a una lista, current
es un puntero a una clase de nodo, y la clase de nodo contiene el miembro de datos data
del tipo T
.
iterador se declara así:
template<class T>
class list
{
public:
class iterator;
};
template<class T>
class list<T>::iterator
{
//stuff
};
soy capaz de compilar la definición de la función del operador sobrecargado * bien, pero cuando trato de hacer algo como:
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)
El error Me sale dice < 1> que estoy usando una indirección ilegal, y < 2> que no puede convertir de list :: iterator a int. Ambos errores ocurren en la línea catorce.
¿Alguien sabe lo que estoy haciendo mal y cómo puedo sobrecargar el operador de direccionamiento indirecto correctamente?
NB: Si necesita ver más código, dígame qué parte, porque no quiero poner todo el código aquí porque tiene 205 líneas, y 204 de esas líneas no (creo) tiene algún error
¿Quisiste escribir "list :: iterator IT;" - debería ser "list :: iterator IT;", ¿verdad? –
leander
@leander: sí, su lista en el código actual, me equivoqué tipeando en mi ejemplo. –