Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[AYUDA]Usando apuntadores de lista

Estas en el tema de [AYUDA]Usando apuntadores de lista en el foro de C/C++ en Foros del Web. Hola que hay? Es mi primer mensaje en este foro (no he visto ningún hilo de presentaciones). Me presento soy surdo y acabo de ver ...
  #1 (permalink)  
Antiguo 23/08/2010, 08:12
 
Fecha de Ingreso: agosto-2010
Mensajes: 8
Antigüedad: 14 años, 3 meses
Puntos: 0
[AYUDA]Usando apuntadores de lista

Hola que hay?
Es mi primer mensaje en este foro (no he visto ningún hilo de presentaciones).
Me presento soy surdo y acabo de ver estos foros, geniales y en castellano, con lo cual pues mejor. Escribir en foros en inglés me es bastante complicado.

Pues bien al asunto.

Estoy en un punto en el cual tengo una clase en el que estoy usando como dato miembro privado una lista de la STL. Hasta aquí todo bien.

Ahora como ejercicio práctico, estoy intentando crear otra clase que se apoya en la clase anterior (y que es amiga), de tal forma que me muestre todos los elementos de la clase, más o menos así:

class Contenedor
{
...
private:
list<string> lista;
};

class MostarLista
{
public:
MostrarLista(const Contenedor& c) { ap = c.lista.begin(); }
....
private:
list<string>::iterator ap;
friend class Contenedor;
};

Mi intención es que el constructor deje ap apuntando al primer elemento de la lista.
La cuestión es que la sentencia ap = c.lista.begin() se queja el compilador de que le falta el operador de asignación (eso es lo que no entiendo) en cambio, lo hago en el programa principal y funciona perfectamente.
¿Me estoy olvidando de algo?


Muchas gracias.
  #2 (permalink)  
Antiguo 23/08/2010, 08:33
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 16 años, 6 meses
Puntos: 61
Respuesta: [AYUDA]Usando apuntadores de lista

El compilador genera el mensaje en español? Que mensaje genera exactamente?
Es un error o la clase se llama MostarLista (sin r en el verbo Mostrar) mientras que el constructor se llama MostrarLista (con r en el verbo Mostrar)

La amistad funciona parecido a los humanos, en el sentido que uno define los amigos que tiene, no al reves. Y parece que la clase MostrarLista dice que es amiga de la otra y accede a sus datos privados y deberia ser al reves.
  #3 (permalink)  
Antiguo 23/08/2010, 08:39
 
Fecha de Ingreso: agosto-2010
Mensajes: 8
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: [AYUDA]Usando apuntadores de lista

es un error tipografico, he reescrito el problema de forma más sencilla para que se remarcar mi problema. (y claro lo he hecho a mano)

el compilador se queja de que el objeto ap (de tipo list<string>) no se corresponde con el tipo de c.lista.begin() que desde mi punto de vista es lo mismo. de hecho se queja de que el operador de asignacion no está definido

de hecho, para no llevarme a confusion hice un pequeño programa en el main para ver si hacia algo mal, pero es que incluso dentro de la clase contenedor tengo recorridos de lista donde uso esa misma asignacion la ap=c.lista.begin()

el problema está en que por lo que sea al definir list<string> dentro de la clase MostrarLista no se cree que sea del mismo tipo que c.lista ...

incluso no teniendo bien la relacion de amistad, comenté la linea private: por curiosidad y el problema continua persistiendo.

creo que me voy a saltar esto, y en vez de usar apuntadores, trabajaré con contenidos ... a la espera de que me venga la luz :P
  #4 (permalink)  
Antiguo 23/08/2010, 09:23
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 16 años, 6 meses
Puntos: 61
Respuesta: [AYUDA]Usando apuntadores de lista

Seria bueno ver el mensaje que el compilador genera. Tal vez haya un problema en la interpretacion que le das.
  #5 (permalink)  
Antiguo 23/08/2010, 12:50
 
Fecha de Ingreso: agosto-2010
Mensajes: 8
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: [AYUDA]Usando apuntadores de lista

Lo siento, no he podido contestar antes. Aquí dejo mi prototipo simplificado.

Código:
#include <iostream>
#include <list>

using namespace std;

class MostrarLista;

class Contenedor
{
	public:
	Contenedor() {}
	private:
	list<string> lista;
	friend class MostrarLista;

};

class MostrarLista
{
	public:
	MostrarLista(const Contenedor& c) { ap = c.lista.begin(); }
	private:
	list<string>::iterator ap;
	};

int main()
{
	return 0;
}
Código:
main.cpp: In constructor ‘MostrarLista::MostrarLista(const Contenedor&)’:
main.cpp:21: error: no match for ‘operator=’ in ‘((MostrarLista*)this)->MostrarLista::ap = c->Contenedor::lista. std::list<_Tp, _Alloc>::begin [with _Tp = std::basic_string<char, std::char_traits<char>, std::allocator<char> >, _Alloc = std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >]()’
/usr/include/c++/4.2.1/bits/stl_list.h:113: note: candidates are: std::_List_iterator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >& std::_List_iterator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >::operator=(const std::_List_iterator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >&)
CalgaryCorpus muy amable y muchas gracias por dedicar tiempo a este problema que tengo. Gracias. Intentaré hacer lo mismo aquí los ratos libres que tenga.
  #6 (permalink)  
Antiguo 23/08/2010, 13:19
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 16 años, 6 meses
Puntos: 61
Respuesta: [AYUDA]Usando apuntadores de lista

Respuesta corta: quita "const" desde la firma del constructor.

Respuesta larga: buscar "const correctness"
(por ejemplo: http://www.parashift.com/c++-faq-lit...rrectness.html)
  #7 (permalink)  
Antiguo 23/08/2010, 15:23
 
Fecha de Ingreso: agosto-2010
Mensajes: 8
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: [AYUDA]Usando apuntadores de lista

graciaaaaaaaaaaas!!!!

sobretodo por el link!!!

Etiquetas: apuntadores, lista
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:35.