Liberia list.c

Hola
Estoy haciendo una lista con la liberia list.c . He hecho una clase de tipo Ficha . La lista es de punteros a ficha :
list<Ficha*> Lista;
El caso es que inserto fichas, borro fichas y recorro la lista sin ningún problema, pero no soy capaz a mostrar las varialbes del obeto lista .
Recorro la lista con un iterador :
iterator itr;
me pongo al principio de la lista :
iterator=Lista.begin();
Muestro la primera ficha :
cout<<*str; <- asi es komo dicen ke hay ke hacer para mostrar un elemento de la lista .
El caso es que me muestra una dirección de memoria, y no se como acceder al objeto para mostrarlo yo .
Si alguien ha manejado alguna vez esta liberia agradecería mucho su ayuda ...
Estoy desesperado ...
Gracias ...

2 respuestas

Respuesta
1
Tranquilo, no t desesperes tan pronto je je, si t vas a dedicar a la programación ya tendrás tiempo para ello ;)
Vale. Un pequeño error de concepto. Como trabaja cout.
Cout es un objeto de una clase, en concreto de la clase ostream. Esta clase tiene como operadores (entre otros):
...
ostream & operator<< (char *)
ostream & operator<< (int)
...
Como muy bien sabes, son funciones para salida estándar.
Pero, y ahí esta el fallo, esta clase, no tiene una función:
ostream & operator<< (CFicha &);
Cuando haces cout << * itr, el acceso esta bien, hay q usar * pq el iterador es un puntero, pero es un puntero a un objeto CFicha.
Solución:
Muy fácil. Solo tienes que hacer una función amiga de la clase CFicha, operator<<, encargada de la salida estandar.
T pasteo este pequeño programa. Si no entiendes algo m vuelves a preguntar, sin problema. Ahí va:
(Esta todo metido en el mismo fichero, aunque no debería ser así, es eolo por comodidad)
#include <fstream.h>
class CFicha
{
public:
CFicha(int a,int b):m_A(a),m_B(b){};
~CFicha(){};
friend ostream & operator<< (ostream &, const CFicha &);
protected:
int m_A;
int m_B;
};
ostream & operator<< (ostream & os, const CFicha & fich)
{
return ( os << fich.m_A << endl << fich.m_B << endl);
}
int main(int argc, char* argv[])
{
CFicha Ficha(5,6);
cout << Ficha;
return 0;
}
Respuesta
1
Sinceramente no me met'i nunca con listas, pero prometo maniana ocuparme en cuanto llegue a la oficina.
Te mantengo al tanto.
No hace falta que te lo curres por mi ... ya lo he solucionado .
Solo era sobrecargar el operator<<
y hacer un cout<<**itr;
De todas formas gracias por tu interés .

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas