Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3607 connectés 

  FORUM HardWare.fr
  Programmation
  Ada

  Ada: type t'class, access, ... bref erreur de type

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Ada: type t'class, access, ... bref erreur de type

n°128783
silvyan
Posté le 20-04-2002 à 00:13:16  profilanswer
 

J'ai cru voir des programmeurs ada, alors bonjour a eux.
Je tiens à vous soumettre ce problème de typage.
Je souhaite faire une structure de type hétérogène.
je pense alors a de l'objet, avec polymorphisme et aiguillage dynamique, mais ca ne marche pas...
 
procedure test is
 type obj1 is tagged null record;
        --1er obj vide
 type obj2 is new obj1 with null record;
        --2nd obj vide
 type ptr is access obj1'class;          
        --pointeur sur la classe obj1 et donc sur obj1 et obj2
 
 procedure test (t: in obj1) is
 begin
  null;
 end test;
 
 procedure test (t: in obj2) is
 begin
  null;
 end test;
 
 procedure test_tag (t: in ptr) is
 begin
  test(t.all);
 end test_tag;
 
begin
 null;
end test;
 
et après compilation j'obtiens l'erreur:
 
If the expected type of a name or expression is a tagged type, then it shall not be dynamically tagged unless it is a controlling operand in a call on a dispatching operation
 
ben alors, oui c'est justement pour faire du "dispatching"...
 
voila, si quelqu'un voulez bien m'expliquer pourquoi, et comment arriver à mes fins. merci.

mood
Publicité
Posté le 20-04-2002 à 00:13:16  profilanswer
 

n°128874
benou
Posté le 20-04-2002 à 16:28:53  profilanswer
 

houla ... ton problème dépasse mes faibles et viellissantes connaissances ;)
désolé, je peux pas t'aider sur ce coup là ...  
 
(up)

n°1908082
Hibou57
Posté le 23-07-2009 à 18:40:20  profilanswer
 

silvyan a écrit :

J'ai cru voir des programmeurs ada, alors bonjour a eux.
Je tiens à vous soumettre ce problème de typage.
Je souhaite faire une structure de type hétérogène.
je pense alors a de l'objet, avec polymorphisme et aiguillage dynamique, mais ca ne marche pas...
[...]


Bonjour Silvyan,
 
Aprés examen de ton source, il apparait que le dispatching ne peut pas fonctionner directement sous la forme où tu l'as tenté, car les primitives (les opérations qui peuvent être redéfinies et donc dispatchées), ne peuvent apparaitrent que dans une spécification de package.
 
Dans ton exemple, les déclarations apparaissent comme des déclarations locales d'une procédure.
 
Il est en effet souvent tentant de faire des teste dans les déclarations locales d'une procédure, car c'est plus rapide, mais ça ne fonctionne pas toujours, car Ada n'autorise pas tout dans ce contexte.
 
Pour faire fonctionner ton exemple, il est tout de même possible de déclarer un package localement (pour ce cas précis, ça marche).
 
De plus, tu as déclaré tes procédure “ test ”, au mauvais endroit. Pour qu'elle soit interprétée comme une primitive, la déclaration d'une opération ou d'une fonction, doit apparaître immédiatement aprés la déclaration du type.
 
Voici un exemple reformulé, qui reprend autant que possible tes propres termes :  
 
(le forum modifie un peu la mise en forme, désolé pour ça)
 

Code :
  1. -- Exemple Ada 2005
  2. procedure Essais is
  3.    -- Pour http://forum.hardware.fr/hfr/Programmation/ADA/
  4.    -- class-access-erreur-sujet_18288_1.htm
  5.    -- ========================================================================
  6.    -- Specifications de Dispatching
  7.    -- ------------------------------------------------------------------------
  8.  
  9.    package Dispatching is
  10.       type Obj1 is tagged null record;
  11.       -- 1er obj vide
  12.       procedure Test (T : in Obj1);
  13.       -- Primitive de Obj1
  14.       type Obj2 is new Obj1 with null record;
  15.       -- 2nd obj vide
  16.       overriding procedure Test (T : in Obj2);
  17.       -- Redefinition de la primitive.
  18.       -- Le mot clé "overriding" n'est pas obligatoire, mais il rend
  19.       -- le source plus claire.
  20.    end Dispatching;
  21.    -- ========================================================================
  22.    -- Implementation de Dispatching
  23.    -- ------------------------------------------------------------------------
  24.  
  25.    package body Dispatching is
  26.      
  27.       procedure Test (T : in Obj1) is
  28.       begin
  29.          null;
  30.       end Test;
  31.       procedure test (T : in Obj2) is
  32.       begin
  33.          null;
  34.       end Test;
  35.      
  36.    end Dispatching;
  37.    -- ========================================================================
  38.    -- Type et objet pour l'essai
  39.    -- ------------------------------------------------------------------------
  40.  
  41.    type Ptr is access Dispatching.Obj1'Class;
  42.    --pointeur sur la classe obj1 et donc sur obj1 et obj2
  43.    procedure Test_Tag (T : in Ptr) is
  44.    begin
  45.       Dispatching.Test (T.all);
  46.    end Test_Tag;
  47.    Obj : constant Ptr := new Dispatching.Obj1;
  48.    -- ========================================================================
  49.    -- Point d'entré du programme
  50.    -- ------------------------------------------------------------------------
  51.  
  52. begin
  53.  
  54.    Test_Tag (Obj);
  55.  
  56. end Essais;


n°1908086
masklinn
í dag viðrar vel til loftárása
Posté le 23-07-2009 à 19:03:17  profilanswer
 

Hibou57 a écrit :


Bonjour Silvyan,


7 ans plus tard [:implosion du tibia]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1908089
nraynaud
lol
Posté le 23-07-2009 à 19:15:49  profilanswer
 

IWH 7 years \o/ statistiquement, le posteur original a changé 3 fois de boite depuis ...


---------------
trainoo.com, c'est fini
n°1908092
sircam
I Like Trains
Posté le 23-07-2009 à 19:21:15  profilanswer
 

C'est ça, la cat ADA. [:pingouino]


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1908103
Hibou57
Posté le 23-07-2009 à 20:11:57  profilanswer
 

Et que ce thème puisse être récurrent et récurer le moral de ses victimes, ça ne vous ait jamais venu à l'esprit ?
 
Vaut-il mieux une question qui reste sans réponse ou un problème qui trouve une solution ?
 

n°1908104
masklinn
í dag viðrar vel til loftárása
Posté le 23-07-2009 à 20:16:32  profilanswer
 

Hibou57 a écrit :

Et que ce thème puisse être récurrent et récurer le moral de ses victimes, ça ne vous ait jamais venu à l'esprit ?


Après 7 ans sans que personne ne s'en préoccupe et pour un langage que personne n'a envie d'utiliser (à part jovalise)? Non.

Message cité 1 fois
Message édité par masklinn le 23-07-2009 à 20:16:41

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1908111
Hibou57
Posté le 23-07-2009 à 20:36:24  profilanswer
 

masklinn a écrit :


Après 7 ans sans que personne ne s'en préoccupe et pour un langage que personne n'a envie d'utiliser (à part jovalise)? Non.


Jovalise est ici ??  :)  :)  
 
Comment il va ?  :)  :)  
 
Invite le à passer sur comp.lang.ada à l'occasion

Message cité 1 fois
Message édité par Hibou57 le 23-07-2009 à 20:36:53
n°1908115
masklinn
í dag viðrar vel til loftárása
Posté le 23-07-2009 à 20:46:35  profilanswer
 

Hibou57 a écrit :


Jovalise est ici ??  :)  :)  
 
Comment il va ?  :)  :)  
 
Invite le à passer sur comp.lang.ada à l'occasion


Moi? Non merci, tu peux t'en charger tout seul j'évite de le lancer perso.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
mood
Publicité
Posté le 23-07-2009 à 20:46:35  profilanswer
 

n°1908268
gilou
Modérateur
Modzilla
Posté le 24-07-2009 à 12:45:31  profilanswer
 

Hibou57 a écrit :

Et que ce thème puisse être récurrent et récurer le moral de ses victimes, ça ne vous ait jamais venu à l'esprit ?
 
Vaut-il mieux une question qui reste sans réponse ou un problème qui trouve une solution ?
 

Oui oui, perso, j'approuve pleinement ton intervention, et si ça plait pas à Masklinn, c'est son problème.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Ada

  Ada: type t'class, access, ... bref erreur de type

 

Sujets relatifs
Erreur avec L'include pour Online.fr [trés urgent!]Personnalisation page d'erreur sous free
Interbase, comment déclarer un champ de type booléen[PHP] C'est quoi cette erreur ????
[c/c++/dll]Pourquoi ce programme provoque une erreur (windows)?Interface Access vers un Agenda ???
[PERL] Liste des tables dans Access.... SQL commande ?Probleme de formulaire ou de PHP... j'arrive pas a trouver l'erreur
[delphi]ca vous dit quelque chose ce message d'erreur?Manipulation de BD Access avec Visual Basic [edit : + onglets]
Plus de sujets relatifs à : Ada: type t'class, access, ... bref erreur de type


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR