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 :

ADA package generic type non visible


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 ADA package generic type non visible
    Bonsoir à tous !!

    je me lance dans la généricité en ada ... et je commence à suer ...

    voila mon problème : j'ai mon fichier de programme principal avec ceci dans la partie déclaration.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    type T_Element is record
          Num : Integer;
          Suivant : T_Lien;
    end record;
     
     
       package Operation_de_base is new Operation_base( T_Element );
       use Operation_de_base;
     
        -- notre liste chaînée
       La_Queue : T_Liste;

    Sachant que Operation_base est mon package parent générique et qu'il contient:


    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
     
    generic
     
       -- définition d'un élément de la liste
        type T_Element is private;
     
    package Operation_base is
     
       -- définition de la liste des membres
       type T_Liste is private;
     
       type T_Lien is private;
     
     
       -- Saisie de donnée
       procedure Saisie(erreur : in out boolean; num : out integer);
    ....
    ...
     
     private
     
       -- un pointeur fait le lien entre les éléments de la liste
       type T_Lien is access all T_Element;
     
     
       -- définition de la liste chaînée
       type T_Liste is 
          record
             Tete : T_Lien;
             Queue: T_Lien;
          end record;
     end;
    Comment puis-je faire pour éviter que JGrasp (compilateur) me dise:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    struct_line.adb:25:17: "T_Lien" is not visible
    struct_line.adb:25:17: non-visible declaration at operation_base.ads:13
    J'ai essayé plusieurs chose genre mettre le type T_Element après l'instanciation du package et lui dire que la définition du type été après l'instanciation mais il me dit alors que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    struct_line.adb:26:53: premature use of incomplete type
    struct_line.adb:26:53: instantiation abandoned
    struct_line.adb:27:08: "Operation_de_base" is undefined
    struct_line.adb:31:17: "T_Lien" is not visible
    Pouvez-vous m'aider ? ça fait quand même bien 2h que je suis planté là dessus ...

    Merci d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour, dans le premier cas, le paquetage Operation_de_Base n'est pas défini.
    Dans le second cas, tu ne peux pas instancier Opération_de_Base avec le type T_Element puisque qu'il n'est pas encore défini.

    Qu'est-ce que le type T_Lien ?

    Tu pourrait définir un paquetage de types avec le type T_Lien pour qu'il soit visible avant l"instanciation de paquetage Opération_de_base.

    Montre nous ton code, et dis nous ce que c'est.

  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, dans le premier cas, le paquetage Operation_de_Base n'est pas défini.
    Dans le second cas, tu ne peux pas instancier Opération_de_Base avec le type T_Element puisque qu'il n'est pas encore défini.

    Qu'est-ce que le type T_Lien ?

    Tu pourrait définir un paquetage de types avec le type T_Lien pour qu'il soit visible avant l"instanciation de paquetage Opération_de_base.

    Montre nous ton code, et dis nous ce que c'est.
    re bonjour ! alors mon programme est enfaite un simple programme de gestion d'une queue dynamique simplement chaînée avec des pointeurs. Et mon type T_Lien, c'est mon type pointeur qui me permet de faire le lien entre les différents éléments de ma queue. Précision ma queue est enfaite une suite d'élément de type record qui sont "lier" par ces pointeur de type T_Lien.

    Est-ce-que je pourrais mettre peut-être mon type T_Lien en paramètre generic de mon paquetage ? mais comment se passe l'instanciation après ?

    merci pour ton aide
    voila je vous met le code de mes deux fichiers ... en espérant que ça puisse vous aider à comprendre ce que je fais

    code du package
    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
     
    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 private;
     
       type T_Lien is private;
     
     
       -- Saisie de donnée
       procedure Saisie(erreur : in out boolean; num : out integer);
     
       -- Ajout d'un élément
       procedure Ajout;
     
       -- Afficher les deux listes
       procedure Afficher_les_listes;
     
       -- Afficher le premier élément de la liste
       procedure Afficher_premier_element;
     
        -- Afficher la suite de la liste sans le premier élément
       procedure Afficher_suite_liste;
     
       -- Test liste vide
       function Test_liste_vide return boolean;
     
       -- Affichage et option du menu           
       procedure Menu (choix : in out Natural);
     
       -- Copier la première liste sur la deuxième           
       procedure Copier;
     
       -- Test l'égalité entre la première liste et la deuxième           
       procedure Test_egalite;
     
       -- Permet d'executer la procedure inserer_bon_endroit
       procedure Trier_liste;
     
       -- Permet d'inserer un élément au bon endroit dans une liste triée
       procedure Inserer_Bon_Endroit(erreur : in out boolean);
     
     
       -- Levée si un débordement survient
       Erreur_Overflow             : exception;
       -- Levée si le type de donnee attendu ne correspond pas à la valeur entrée
       Erreur_Donnee_Incorrecte    : exception;   
       -- 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 de la liste chaînée
       type T_Liste is 
          record
             Tete : T_Lien;
             Queue: T_Lien;
          end record;
     
     end;
    --------------------------------------------------------------------
    code du programme principal
    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
     
    ------------------------------------------------------------------------------------
    -- Fichier     : Struct_Line.adb                                          
    -- Auteur      : Stéphane Rhyn                                      
    -- Date        : 1 mars 2010                                   
    --                                                                            
    -- But         :  
    -- 
    -- Remarque(s) : V2
    --                  
    -- Compilateur : GNAT GPL 2009                                                                       
    ------------------------------------------------------------------------------------
     
    with Ada.Text_Io;                       use Ada.Text_Io;
    with Ada.Integer_Text_Io;               use Ada.Integer_Text_Io;
    with Operation_base;
     
    procedure Struct_Line is
     
       type T_Element;
     
       package Operation_de_base is new Operation_base( T_Element );
       use Operation_de_base;
     
       type T_Element is record
          Num : Integer;
          Suivant : T_Lien;
       end record;
     
        -- notre liste chaînée
       La_Queue : T_Liste;
     
       -- notre liste chaînée copiée
       La_Queue_copie : T_Liste;
     
       Choix : Natural := 1;
       erreur : boolean := false; 
       taille : Integer := 0;
       flag : boolean := false;
       Element : T_Element;
     
    begin -- Struct_Line
     
       -- Présentation du programme
       New_Line(2);
       Put("                             GESTION D UNE LISTE                                ");New_Line;
       Put("--------------------------------------------------------------------------------");
       New_Line;
     
     
       loop   
          --Menu
          menu(choix);       
          New_Line(2);
     
          case Choix is
     
             -- Admission nouveau membre
             when 1 =>  Saisie(erreur, Element);
                        Ajout(La_Queue, Element);         
     
             -- Afficher les deux listes
             when 2 =>  Afficher_les_listes;
     
             -- Afficher le premier élément
             when 3 =>  Afficher_premier_element;                   
     
             -- Afficher la suite de la liste
             when 4 =>  Afficher_suite_liste;
     
             -- Test si la liste est vide
             when 5 =>  if Test_liste_vide then
                           Put("La liste est vide !");
                        else
                           Put("La liste n'est pas vide");
                        end if;
     
             -- Longueur de la liste     
             when 6 =>  
                        longueur_Queue(taille);
                        Put("Il y a ");
                        put(taille,0);
                        Put(" element dans la liste!");
     
             -- Copie de la liste     
             when 7 =>  
                        Copier;
                        Afficher_les_listes;
     
             -- Test si les listes sont égales   
             when 8 =>  
                        Test_egalite;
     
             -- Inserer un élément à une position   
             when 9 =>  
                        Inserer_Position(erreur);
     
             -- Trier la liste
             when 10 =>  Trier_liste;
                         flag := true;
     
             --Inserer au bon endroit
             when 11 =>  if flag then
                            Inserer_Bon_Endroit(erreur);
                         else
                            New_Line;
                            Put("Vous ne pouvez pas faire cette action la liste n'est pas triee !");
                         end if;
     
             -- Quitter le programme
             when 12 =>  exit;
     
             when others => menu(choix);
                            New_Line(2);
          end case;
     
          New_Line(3);
          Put("--------------------------------------------------------------------------------");
          New_Line(2);
     
       end loop;
     
       exception
          when Constraint_Error => raise Erreur_Overflow;
          when Data_Error => raise Erreur_Donnee_Incorrecte;
     
    end Struct_Line;

  4. #4
    Invité
    Invité(e)
    Par défaut
    Je ne suis pas pro mais à mon avis, il font comme moi, et c'est pas comme ça que je fais une liste chaînée.
    Le type t_lien doit être un pointeur sur le type T_Noeud.

    Voilà comment je commencerais.
    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
    generic
    
       Type T_element is private;
    
    
    Package liste_chaînée_générique is
       Type T_Liste is private;
    .../...
    
     Les opérations sur un liste...
    private
    
    Type T_Noeud;
    
    Type T_Lien is access T_Noeud;
    
    Type T_Noeud is
       record
           Suivant : T_Lien;
           Element : T_Element;
       end record;
    
    Type T_Liste is
       record
          Tête : T_Lien;
          Queue : T_Lien;
        end record;
    end package Liste_chaînée_générique;
    Y a t-il quelque chose qui te gène dans cette déclaration ?

  5. #5
    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
    Je ne suis pas pro mais à mon avis, il font comme moi, et c'est pas comme ça que je fais une liste chaînée.
    Le type t_lien doit être un pointeur sur le type T_Noeud.

    Voilà comment je commencerais.
    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
    generic
    
       Type T_element is private;
    
    
    Package liste_chaînée_générique is
       Type T_Liste is private;
    .../...
    
     Les opérations sur un liste...
    private
    
    Type T_Noeud;
    
    Type T_Lien is access T_Noeud;
    
    Type T_Noeud is
       record
           Suivant : T_Lien;
           Element : T_Element;
       end record;
    
    Type T_Liste is
       record
          Tête : T_Lien;
          Queue : T_Lien;
        end record;
    end package Liste_chaînée_générique;
    Y a t-il quelque chose qui te gène dans cette déclaration ?

    OOOOOH alors eeeeh y a 10 en lisant ton code je me suis dis oui c'était pas du tout ça ... lol mais enfait c moi qui me suis boufé la queue

    Parce que enfaite j'avais pas de type T_Noeud mais le type T_Noeud me sert à définir le type de cellule de la queue et c'est ce type là qui contient mon type pointeur T_Lien et mon type T_Element ... ^^

    voila mon j'ai passé par dessus ça ^^ et pis donc normal que ça fonctionne pas.

    Bon bin la prochaine fois avant de chercher pendant 5h pourquoi un type n'est pas visible je contrôlerais ma structure ...

    Merci beaucoup en tout cas !! c'est juste génial qui ait autant de répondant sur ce forum...

    a+ Stéph

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. package ascb.util.numberUtilities Non visible par flash CS3
    Par amateur_will dans le forum ActionScript 3
    Réponses: 1
    Dernier message: 18/07/2008, 06h49
  2. Package et type privé non contraint
    Par Celelibi dans le forum Ada
    Réponses: 1
    Dernier message: 04/11/2006, 16h47
  3. Capture d'une form non visible
    Par Linkin dans le forum Composants VCL
    Réponses: 3
    Dernier message: 14/04/2004, 14h58
  4. Réponses: 4
    Dernier message: 07/12/2002, 15h24
  5. Form principale non visible au demarrage!!!!
    Par toufou dans le forum Composants VCL
    Réponses: 2
    Dernier message: 20/07/2002, 21h49

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