Ver Mensaje Individual
  #1 (permalink)  
Antiguo 02/08/2010, 07:45
Kandorf
 
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