Hola!
Estoy haciendo una práctica en ADA sobre gestión de datos de alumnos matriculados en una asignatura y los ficheros me están dando muchos problemas...
He distribuido el trabajo en varios TAD's y ficheros:
- Cursos.ads (.adb) --> ok
- Alumnos.ads (.adb) --> ok
- Gestion_alumnos.ads (.adb) --> trabaja con ficheros directos (uno es "fichero de hash")
- Gestion_cursos.ads (.adb) --> ídem
- Gestion_movimientos.ads (.adb) --> trabaja con ficheros secuencials y depende de los anteriores
- Menu_mantenimiento.adb
Pero llevo días con el mismo problema sólo probando los que trabajan con ficheros directos. Concretamente en Gestion_cursos (el otro será análogo) antes tenía lo siguiente:
En el .ads:
private
type Clau is record
Dni: Integer;
Quin: N_Curs;
end record;
-- tipus de registre del fitxer de Hash
type Info is record
K: Clau;
Pos: Nombre_Cursos; -- posició que ocupa l'element al fitxer de dades
Seg: Nombre_Hash; -- posició del primer element que han "col•lidit"
Estat: Estats:=L; -- lliure / ocupat / esborrat
end record;
-- nombre_cursos y nombre_hash deberían ser Positive_count según el fichero
package Inf_Io is new Ada.Direct_Io(Info); use Inf_Io;
(sub) type Hash_Cursos is new Inf_Io.File_Type;
(sub) type H_Positive_Count is new Inf_Io.Positive_Count;
package C_Io is new Ada.Direct_Io(Curs); use C_Io;
type Fitxer_Cursos is new C_Io.File_Type;
type C_Positive_Count is new C_Io.Positive_Count;
Ahora lo tengo así:
private
type Clau is record
Dni: Integer;
Quin: N_Curs;
end record;
-- tipus de registre del fitxer de Hash
type Info is record
K: Clau;
Pos: Nombre_Cursos; -- posició que ocupa l'element al fitxer de dades
Seg: Nombre_Hash; -- posició del primer element que han "col•lidit"
Estat: Estats:=L; -- lliure / ocupat / esborrat
end record;
Y en el package body:
package Inf_Io is new Ada.Direct_Io(Info); use Inf_Io;
(sub) type Hash_Cursos is new Inf_Io.File_Type;
(sub) type H_Positive_Count is new Inf_Io.Positive_Count;
package C_Io is new Ada.Direct_Io(Curs); use C_Io;
(sub) type Fitxer_Cursos is new C_Io.File_Type;
(sub) type C_Positive_Count is new C_Io.Positive_Count;
Los errores que me salen son como estos (también tengo problemas con Set_index...):
- Inf_io.Create(Fh, InOut_File, Fitxer_Hash); -- >
Expected private type “Ada.Direct_io.File_Type" … found type Hash_Cursos
- inf_io.Write(Fh, R, Inf_io.Positive_Count( I ) ); -->
no candidate interpretations match actuals: too many arguments in call
expected private type “Ada.Direct_io.File_Type” … found type Hash_Cursos
No sé si me he explicado bien (la práctica es aún un poco chapucera)... Alguien puede echarme una mano??
¡Muchas gracias!