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

Ayuda con Lista Enlazada que devuelve Puntero a uno de sus Elementos

Estas en el tema de Ayuda con Lista Enlazada que devuelve Puntero a uno de sus Elementos en el foro de C/C++ en Foros del Web. Hola, estoy creando un juego, tengo una Lista doblemene enlazada para los enemigos, esta es la clase: Código: class TEnemigo { public: TEnemigo(); //TEnemigo(u32 Numerox, ...
  #1 (permalink)  
Antiguo 02/08/2010, 07:45
 
Fecha de Ingreso: mayo-2008
Mensajes: 18
Antigüedad: 16 años, 6 meses
Puntos: 0
Ayuda con Lista Enlazada que devuelve Puntero a uno de sus Elementos

Hola, estoy creando un juego, tengo una Lista doblemene enlazada para los enemigos, esta es la clase:
Código:
class TEnemigo {
	public:
		TEnemigo();
		//TEnemigo(u32 Numerox, u8 xAncho, u8 xAlto);
		s32 X, Y;
		u8 Alto, Ancho;
		u32 NSprite;

		TEnemigo *Anterior, *Siguiente;

		void SetXY(s32 SX, s32 SY);
		void Nuevo(u8 Tipo, u32 Numero);
		void Morir(void);
		void Desplazar(s32 CoordX, s32 CoordY);

		TEnemigo Enemigo(u8 Numero);
};
El problema está con la función TEnemigo Enemigo(u8 Numero);, que se le pasa la posición de un enemigo dentro de la lista y se supone que tiene que devolver un puntero a ese elemento de la lista, aquí la función:
Código:
TEnemigo TEnemigo::Enemigo(u8 Numero){
	int i;
	TEnemigo *Aux;

	Aux=this;
	for (i=0; i<=Numero; i++) {   		
		if (i==Numero)
			return *Aux;
		else if (Aux->Siguiente!=NULL) 
			Aux=Aux->Siguiente;
		else
			break;
	}
	//return NULL; (Esto lo comento porque si no me da el error: "invalid conversion from 'int' to non-scalar type TEnemigo requested")
}
y en el main la llamo así:
Código:
AuxEnemigo=&Enemigos->Enemigo(0);
Antes no utilizaba una variable temporal, pero es de la única manera que he conseguido algo, el problema está en que creo que, al no estar devolviendo un puntero, sino un objeto creado dentro de la función, este desaparece cuando termina, y no hace nada cuando intento utilizar el valor devuelto.
He intentado crear la cabecera de la función de esta manera
Código:
TEnemigo *Enemigo(u8 Numero);
// Y al definirla:
TEnemigo TEnemigo::*Enemigo(u8 Numero){
Pero en la línea del 'this' al compilar me da el error: "invalid use of 'this' in non-member function", me da a entender que se refiere a que la función no pertenece a la clase :S

Lo siento si la duda es demasiado tonta, hace mucho que no programo en C y en los tiempos en que programaba en este lenguaje no utilicé apenas la orientación a objetos, sí la he utilizado mucho en Pascal, pero es distinto. Si la lista está mal planteada avisadme.

Saludos y gracias por vuestro tiempo.

Última edición por Kandorf; 02/08/2010 a las 08:22
  #2 (permalink)  
Antiguo 02/08/2010, 09:52
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 8 meses
Puntos: 228
Respuesta: Ayuda con Lista Enlazada que devuelve Puntero a uno de sus Elementos

Prueba con la siguiente definicion:

TEnemigo *Enemigo(u8 Numero);

TEnemigo * TEnemigo::Enemigo(u8 Numero){
....
}

Devuelves un puntero de un objeto Tenemigo. Y adentro de la funcion Enemigo le sacas el asteristico a la linea return *Aux;

Quedaria asi return Aux;
  #3 (permalink)  
Antiguo 02/08/2010, 17:47
 
Fecha de Ingreso: mayo-2008
Mensajes: 18
Antigüedad: 16 años, 6 meses
Puntos: 0
Respuesta: Ayuda con Lista Enlazada que devuelve Puntero a uno de sus Elementos

Muaaahahaha, era eso.
Muchas gracias, has resuelto el quebradero de cabeza que tenía. Era una simpleza, se ve que era un fallo de ignorancia, llevaba toda la mañana probando combinaciones y no se me ha ocurrido poner el indicador de puntero delante del nombre de la clase.

En fin, saludos y gracias de nuevo, nos volveremos a ver pronto.

Etiquetas: elementos, enlazada, lista, puntero
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 03:22.