peut etre un probleme de syntaxe mais bon...

peut etre un probleme de syntaxe mais bon... - Ada - Programmation

Marsh Posté le 05-02-2003 à 15:21:20    

j'ai l'erreur suivante a la compilation : controlled type must be declared at the library level
 
seulement je ne sais pas ce qu'est un "controlled"
j'en ai un dans les fichiers sources, mais je sais meme pas a quoi il sert
 
qqn le saurait?

Reply

Marsh Posté le 05-02-2003 à 15:21:20   

Reply

Marsh Posté le 05-02-2003 à 16:39:55    

Un type contrôlé est un type dont tu peux "contrôler" le cycle de vie. Plus simplement, pour un type controlé, tu peux surcharger les méthodes Initialize, Adjust et Finalize, qui seront appelées à chaque création, mise à jour et destruction des instances de ce type.
L'erreur levée vient probablement du fait que ton type a été défini localement à une procédure/fonction, ce qui n'est pas permis par la spec. Un type contrôlé doit être connu pendant toute l'exécution du programme. Il faut donc le déclarer au niveau d'un package.

Reply

Marsh Posté le 05-02-2003 à 19:20:40    

ouh la ca a pas l'air simple, et je crois pas avoir compris... :/
 
dans mon code j'ai ca:

Code :
  1. type Pointer is new Controlled
  2.      with record
  3.         Id : Natural range 0 .. Pointer_Max;
  4.      end record;


dans un .ads, et ca:

Code :
  1. The_Nil_Pointer : constant Pointer := (Controlled with Id => 0);


dans un fichier adb
 
et apres dans mon fichier principal :

Code :
  1. with pointer_adt;
  2. procedure test is
  3.    package test1 is new pointer_adt(index => natural, element => character);
  4.    use test1;
  5.    choix : natural := 0;
  6. begin
  7. ...


 
et je capte pas bien où est la faute...

Reply

Marsh Posté le 05-02-2003 à 19:35:53    

ah oui et sinon, je suis pour ainsi dire sur, que l'erreur vient de mon programme test et pas des sources
autrement dit c moi qui doit mal instancier tout ca sans doute

Reply

Marsh Posté le 05-02-2003 à 21:44:12    

Si tu instancies ton paquetage générique dans la partie déclarative de ta fonction, ça revient à définir un type contrôlé comme local à ta fonction => tu rentres dans le cas que j'ai expliqué plus haut, et donc l'erreur du compilo.
 
Solutions : soit tu sors ton instanciation de la procédure, soit tu fais un nouveau paquetage que tu appelles avec ta procédure test.
 
Pour la première solution, il devrait suffire d'écrire ça à la place de ta procédure (non testé, mais ça devrait être bon) :

Code :
  1. package test1 is new pointer_adt(index => natural, element => character);
  2. use test1;
  3. procedure test is
  4.   choix : natural := 0;
  5. begin
  6. ...

Reply

Marsh Posté le 06-02-2003 à 09:28:18    

ahhhh ok
suffisait juste de mettre ca en dehors de la procedure alors
maintenant j'comprends mieux ta premiere reponse
j suis bete des fois moi :sleep:
en tk merci bcp !
 
hum... et ben en fait ca marche pas bcp mieux
ce coup ci il me dit qu'il manque le mot "body"
il doit croire que je veux implementer le package a cet endroit...


Message édité par muad_dib le 06-02-2003 à 09:35:37
Reply

Marsh Posté le 06-02-2003 à 10:53:10    

muad_dib a écrit :


hum... et ben en fait ca marche pas bcp mieux
ce coup ci il me dit qu'il manque le mot "body"
il doit croire que je veux implementer le package a cet endroit...


Hmmm... dans ce cas il faut que tu crées un autre paquetage dans lequel tu instancies ton paquetage générique, et où tu mets ta procédure test, puis tu appelles cette procédure depuis ton programme principal ... genre :
 
test_pkg.adb

Code :
  1. package body test is
  2.   package test1 is new ...
  3.   procedure test is ...
  4. end test


... avec le test.ads qui exporte la procédure test
 
et dans test.adb :

Code :
  1. with test_pkg;
  2.   procedure test is
  3.   begin
  4.     test_pkg.test;
  5.   end test;


En général j'évite de mettre trop de code dans la procédure principale des programmes, ça évite quelques soucis  :D

Reply

Marsh Posté le 06-02-2003 à 15:06:50    

ouh la la c le bazar qand meme
bon j'essaye ca des que j'ai fini mon debug en C sur un autre truc

Reply

Marsh Posté le 22-11-2004 à 17:54:20    

ce topic est plutot interessant, mais dis donc Muad_Dib, tu ne serais pas en licence info à créteil ????


---------------
<<<  TAGAZOK >>>
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed