ADA - Premature use of incomplete type

 
Vista:

Premature use of incomplete type

Publicado por Juanma (1 intervención) el 11/04/2006 22:01:02
Buenas,

estoy haciendo una práctica para una asignatura que nos dan en pseudocódigo, así que no puedo preguntarle al profe. Cogí ADA pq es el lenguaje de programación que dimos en 1º...

tengo un paquete para hacer listas con punteros, pk_llista_pun. Este package es genérico, para poder hacer listas de distintos tipos, así que he de crear una nueva instancia del package genérico con el tipo que me interesa...

p.ej:
---------Ejemplo
with pk_llista_pun;
[...]
type a;
type b;

package lista_a is new pk_llista_pun (a);
package lista_b is new pk_llista_pun (b);

type a is record
nombre:string;
R_a: lista_b.posicion;
end record;
type b is record
nombre:string;
R_a: lista_a.posicion;
end record;
[...]
---------Fin ejemplo

Es decir, tengo que hacer una lista de tipos que, para poder definirlos, necesito haber creado los packages.

Pero al compilar esto me da el error "Premature use of incomplete type" en los packages y luego, evidentemente, "lista_a.posicion is undefined"

Alguna idea sobre cómo solucionar esto? Algún manual dónde pueda haber indicaciones? Apenas he encontrado referencias al tema, google sólo da enlaces a los fuentes del compilador...

Muchas gracias por la ayuda.
Un saludo,
Juanma
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Error "Premature use of incomplete type" al instanciar un paquete genérico

Publicado por Alejandro (155 intervenciones) el 30/06/2023 16:51:46
La solución al error "Premature use of incomplete type" se basa en asegurarse de que los tipos utilizados en la instancia del paquete genérico estén completamente definidos antes de realizar la instancia. Aquí tienes los pasos que puedes seguir para solucionar este problema:

1. Reordena tu código para que la definición de los tipos `a` y `b` se encuentre antes de la instancia de los paquetes `lista_a` y `lista_b`. Esto asegurará que los tipos estén completamente definidos cuando se realice la instancia.

2. Asegúrate de que el paquete `pk_llista_pun` esté completamente definido antes de realizar la instancia. Si el paquete se encuentra en otro archivo, asegúrate de que ese archivo se compile y se incluya correctamente en tu proyecto.

Aquí tienes un ejemplo revisado del código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
with pk_llista_pun;
 
type a is record
   nombre : string;
   R_a : pk_llista_pun.posicion;
end record;
 
type b is record
   nombre : string;
   R_a : pk_llista_pun.posicion;
end record;
 
package lista_a is new pk_llista_pun (a);
package lista_b is new pk_llista_pun (b);

En este ejemplo, los tipos `a` y `b` se definen antes de la instancia de los paquetes `lista_a` y `lista_b`. Esto asegura que los tipos estén completamente definidos cuando se realice la instancia.

Es importante tener en cuenta que los paquetes y tipos genéricos en Ada requieren que los tipos utilizados en la instancia estén completamente definidos. Si intentas instanciar un paquete genérico con un tipo incompleto, se producirá un error de compilación similar al que has experimentado.

Para obtener más información y referencias sobre el uso de paquetes genéricos en Ada, puedes consultar la documentación del compilador de Ada que estás utilizando, como el GNAT Reference Manual.

Recuerda que cada consulta que realices puede tener sus propias particularidades y requerir soluciones específicas. Siempre es útil consultar la documentación oficial de Ada y buscar recursos en línea para obtener más información sobre los temas que estás abordando.

Espero que esta solución te sea útil para resolver el error "Premature use of incomplete type" al instanciar un paquete genérico en Ada ¡Buena suerte con tu práctica!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar