Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: SrCooper en 24 Julio 2013, 14:32 pm



Título: Problema con iterador a lista de punteros
Publicado por: SrCooper en 24 Julio 2013, 14:32 pm
Buenas, tengo un problema con un código similar al siguiente:

Código
  1. class Clase1{
  2. public:
  3.    Clase1();
  4.  
  5.    void funcion1();
  6. };
  7.  
  8. class Clase2{
  9.    list<Clase1*> Lista;
  10. public:
  11.    Clase2();
  12.  
  13.    void funcion2();
  14. };
  15.  
  16. void Clase2::funcion2(){
  17.    list<Clase1*>::iterator it = Lista.begin();
  18.    for (; it != Lista.end(); it++){
  19.        it->funcion1(); //Aquí esta el error
  20.    }
  21. }

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  ;)


Título: Re: Problema con iterador a lista de punteros
Publicado por: Eternal Idol en 24 Julio 2013, 14:44 pm
Código
  1. (*it)->funcion1();


Título: Re: Problema con iterador a lista de punteros
Publicado por: eferion en 24 Julio 2013, 14:52 pm
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
  1. class Clase2{
  2.    list<Clase1> Lista;
  3. public:
  4.    Clase2();
  5.  
  6.    void funcion2();
  7. };
  8.  
  9. void Clase2::funcion2(){
  10.    list<Clase1>::iterator it = Lista.begin();
  11.    for (; it != Lista.end(); it++)
  12.    {
  13.        it->funcion1();   // metodo uno
  14.        (*it).funcion1( ); // metodo dos
  15.    }
  16. }

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
  1. Clase* clase = *it;
  2. clase->funcion1( );


Título: Re: Problema con iterador a lista de punteros
Publicado por: SrCooper en 24 Julio 2013, 15:41 pm
Muchas gracias, ya me compila bien  :D


Título: Re: Problema con iterador a lista de punteros
Publicado por: Eternal Idol en 24 Julio 2013, 15:43 pm
De nadas  ::)