Historias
Slashboxes
Comentarios
 

Login Barrapunto

Login

[ Crear nueva cuenta ]

Down Kill Up Publicidad

Bitácora de Andres_age (12730)

Domingo, 16 de Enero 2005

Pequeña duda de punteros en Ada

10:31h.
Tecnología
Buenas... Me sale un error en ADA cuando intento compilar... seguramente sea una tontería, pero no logro solucionarlo, así que si alguien me hecha una manita, le estaré agradecido.
Empezemos; he hecho un array de objetos cuyo tipo es variable, así que he tenido que hacer un puntero:

type Pt_Objeto is access T_Objeto;

type T_Inventario is array (1 .. 10) of Pt_Objeto;

De lo contrario me aparecía un precioso "unconstrained element type in array declaration"

Para asignar los valores uso

Heroe.Inventario(1):=new T_Objeto(Puñal);

Sin embargo, cuando quiero comprobar el valor en un case, me sale un error bastante raro...
Cuando pongo

case Heroe.Inventario(Contador).all is

con "contador" un entero entre 1 y 10, me aparece el error al compilar "expected a discrete type; found type PT_Objeto defined at objetos.ads" En teoria accedo a la posición del puntero... no? Entonces porque detecta que estoy usando un puntero?

Este hilo ha sido archivado. No pueden publicarse nuevos comentarios.
Mostrar opciones Umbral:
Y recuerda: Los comentarios que siguen pertenecen a las personas que los han enviado. No somos responsables de los mismos.
  • Mándale un correo a Javier Miranda [ulpgc.es], una autoridad en la materia, al que aprovecho para enviar un afectuoso saludo.
    --


    --------
    In fire we trust [blogspot.com]
    --------
  • Ahora compila bien, pero no se comporta como toca :-(

    El campo inventario del registro lo inicializo así
    Inventario : T_Inventario:= (others => new T_Objeto'(t=>nada))

    Sin embargo cuando leo de heroe.inventario(loquesea) me lee cualquier cosa: a veces un puñal, otras nada, otras una espada... y otras me da error "invalid data". ¿Que se supone que hago mal?

    Además si hago
    Pers.Inventario(1):=new t_objeto'(t=>puñal);
    me dice que falta definir valores para daño_0 y velocidad_0. Pero ya los he inicializado al definir el tipo t_objeto, y precisamente quiero usar ESOS valores que vienen por defecto. Porque no me deja??
  • Re:ada ada ada

    (Puntos:2)
    El tipo T_objeto es un tipo variable. Tenemos
      type Objeto is
                      (Puñal,

                        Espada,
                        Arco,
                        Ballesta,
                        Botas,
                        Nada);

    subtype Armafilo is Objeto range Puñal..Espada;
    subtype Armadistancia is Objeto range Arco..Ballesta;

    type T_Objeto (T: Objeto) is
          record
                case T is
                      when Armafilo=>
                            Daño_0: Integer:=Objeto'Pos(T)*10;
                            Retardo_0:Integer:=Objeto'Pos(T)*2;
                      when Armadistancia=>
                            Daño_1: Integer:=Objeto'Pos(T)*8;
                            Retardo_1:Integer:=Objeto'Pos(T)*2-2;
                            Municion:Integer:=10;
                      when Botas=>
                            Velocidad_Extra: Integer:=2;
                      when others=>
                            null;
                end case;
          end record;

    Es que Heroe.Inventario es un array de punteros acces of T_Objeto. En teoria es eso, un inventario. La posición 1 puede tener cualquier objeto, la posición 2 también puede tener cualquier objeto, incluso repetido... lo que quiero es con ese case definir la textura que pintaré en el cuadro del inventario

    case Heroe.Inventario(Contador).all is
                            when T_Objeto(Puñal)=>
                                  Cuadro_Inv:=Load_Bitmap("Inv_Punyal");
                            when T_Objeto(Espada)=>
                                  Cuadro_Inv:=Load_Bitmap("Inv_Espada");
                      etc

    Antes había hecho el inventario como array de tipo Objeto a secas, lo que pasaba es que las propiedades de cada objeto las decidía en el programa principal y me pareció muy cutre (si hacer un "juego" con adagraph no es de por sí cutre... xDDD), así que ya defino sus propiedades desde el paquete objetos.ads

    PS: Si quereis ver una screen de lo que llevo por ahora, aquí esta :P
    http://img89.exs.cx/img89/373/adazelda2jn.jpg
    [ Padre ]
  • 1 respuesta por debajo de tu umbral de lectura actual.