IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Ada Discussion :

Paquetage generic et type privé


Sujet :

Ada

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2010
    Messages : 24
    Points : 13
    Points
    13
    Par défaut Paquetage generic et type privé
    Bonjour, je suis entrain de faire un programme avec un paquetage générique et qui contient un type privé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
     
    generic
     
       -- définition d'un élément de la liste
        type T_Element is private;
     
        with function ">" (gauche, droite : T_Element) return Boolean is <>;
     
    package Operation_base is
     
     
       -- définition de la liste des membres
       type T_Liste is limited private;
       -- définition du lien entre les éléments de la liste
       type T_Lien is limited private;   
     
       -- Saisie de donnée
       procedure Saisie(erreur : in out boolean; num : out integer);
     
       -- Ajout d'un élément
       procedure Ajout;
     
       -- Test liste vide
       function Test_liste_vide return boolean;
     
       -- Levée si la liste est vide.
       Liste_Vide                  : exception;
     
       -- partie privée non visible des utilisateurs du package
       private
     
       -- un pointueur fait le lien entre les éléments de la liste
       type T_Lien is access all T_Element;
     
       -- définition d'un élément
       type T_Element is record
          Num : Integer;
          Suivant : T_Lien;
       end record;       
     
       -- définition de la liste chaînée
       type T_Liste is 
          record
             Tete : T_Lien;
             Queue: T_Lien;
          end record;
     
       -- notre liste chaînée
       La_Queue : T_Liste;   
     end;
    voila le code que j'ai actuellement. J'ai un problème au niveau du complilateur (JGrasp) qui me dit "generic type cannot have a completion" donc que mon T_Element n'a pas besoin d'être complété si je comprends bien ... ?

    J'ai regardé plusieurs exemple de code ... et j'ai vu que quand il y avait le generic et pis un type privé dedans, il n'y avait pas la défénition du type T_Element. Alors j'ai essayer de mettre la définition de mon type T_Element en commentaire .. mais j'obtiens encore plus d'erreur.

    Alors voila ma question, j'utilise mon T_Element un peu partout dans mon programme de gestion d'une liste, et le paquetage pour gérer cette liste doit être générique, comment dois-je fais pour résoudre ce problème de "completion"?

    Merci d'avance

    Stéph

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Tu dois donner la définition de ton type effectif avant l'instanciation du paquetage générique où tu va donner le type effectif en paramètre ; c'est à dire dans la procédure principale ou un paquetage qui utilise le paquetage générique.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2010
    Messages : 24
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par jovalise Voir le message
    Bonjour,
    Tu dois donner la définition de ton type effectif avant l'instanciation du paquetage générique où tu va donner le type effectif en paramètre ; c'est à dire dans la procédure principale ou un paquetage qui utilise le paquetage générique.
    bonjour, eeeeh excuse moi je crois ne pas t'avoir bien compris ... tu me propose de mettre la définition de mon type avec tout le reste du code de ce fichier ?

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 114
    Points : 139
    Points
    139
    Par défaut
    Bonsoir,
    Les paramètres d'un paquetage générique sont assimilables à des paramètres d'une procédure. Ce sont donc des paramètres formels. De plus, si tu utilises un type privé comme paramètre formel, on ne connait pas sa structure, ni son type effectif qui sera donné à l'instanciation du paquetage. Il est donc faux de vouloir compléter ce type dans le paquetage générique, tout comme il est encore plus faux d'utiliser des caractéristiques de ce type dans le corps du générique. En effet, c'est contraire à l'esprit d'un générique. Comme tu le dis, un paquetage générique peut fonctionner avec n'importe quel type effectif (integer, character, float, tableau, classe, etc ...).
    Je pense que tu as un pb de conception de ton paquetage qu'il faut résoudre.

Discussions similaires

  1. paquetage et type privé
    Par simovic dans le forum Ada
    Réponses: 1
    Dernier message: 09/08/2010, 11h24
  2. generics et types primitifs
    Par BakaOnigiri dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 28/05/2008, 17h03
  3. Problème de généricité de type privé
    Par dr_octopus74 dans le forum Ada
    Réponses: 5
    Dernier message: 20/11/2007, 22h27
  4. [generics] Génériques à types multiples
    Par sanchou dans le forum Langage
    Réponses: 6
    Dernier message: 06/07/2007, 09h42
  5. Generics et Types Incompatibles
    Par atnnn dans le forum Langage
    Réponses: 6
    Dernier message: 22/01/2007, 16h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo