Problema con iterador a lista de punteros

Iniciado por SrCooper, 24 Julio 2013, 14:32 PM

0 Miembros y 1 Visitante están viendo este tema.

SrCooper

Buenas, tengo un problema con un código similar al siguiente:

Código (cpp) [Seleccionar]
class Clase1{
public:
   Clase1();
   
   void funcion1();
};

class Clase2{
   list<Clase1*> Lista;
public:
   Clase2();
   
   void funcion2();
};

void Clase2::funcion2(){
   list<Clase1*>::iterator it = Lista.begin();
   for (; it != Lista.end(); it++){
       it->funcion1(); //Aquí esta el error
   }
}


Es decir, el problema es que no se como llamar a la funcion1 de la Clase1 utilizando un iterador, porque la lista es de punteros. Utilizando vectores se solucionaría, pero para este caso en concreto necesito usar listas, porque necesito hacer un Lista.erase()

Un saludo y espero que alguien me aclare este lío  ;)

Eternal Idol

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

eferion

Los iteradores los podrías entender como unos punteros que recorren la lista, arbol, matriz, etc.

Si la lista fuese de elementos estáticos, podrías acceder a sus miembros de la siguiente forma:

Código (cpp) [Seleccionar]

class Clase2{
    list<Clase1> Lista;
public:
    Clase2();

    void funcion2();
};

void Clase2::funcion2(){
    list<Clase1>::iterator it = Lista.begin();
    for (; it != Lista.end(); it++)
    {
        it->funcion1();   // metodo uno
        (*it).funcion1( ); // metodo dos
    }
}


Como tú estás manejando una lista de punteros, tienes que añadir un nivel más de indirección para poder acceder a los miembros del elemento apuntado... que es la solución que te ha dado Eternal Idol.

También en este caso puedes hacer:

Código (cpp) [Seleccionar]

Clase* clase = *it;
clase->funcion1( );

SrCooper


Eternal Idol

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón