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 :

Généricité et .ads .adb


Sujet :

Ada

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 102
    Points : 58
    Points
    58
    Par défaut Généricité et .ads .adb
    Bonjour,

    je suis débutant et je rencontre un bête problème en ADA concernant la généricité et l'emploi de fichiers .ads (spécifications) et .adb (corps).

    Voici le contenu de mon fichier echange_gen.ads :

    generic
    type x is private;
    procedure echange_gen (a, b : in out x);
    Et le contenu de mon echange_gen.adb :

    with Ada.Text_Io; use Ada.Text_Io;
    with Ada.Integer_Text_Io; use Ada.Integer_Text_Io;
    with Echange_Gen;

    procedure Echange_gen (A, B : in out x) is
    temp : x;
    begin
    temp := a; a := b; b := temp;
    end Echange_Gen;
    Jusqu'ici pas de problème... Mais dès que je veux ajouter une procédure après la procedure echange_gen dans echange_gen.adb j'ai systématiquement la même erreur :

    echange_gen.adb:13:01: end of file expected, file can have only one compilation unit
    J'ai effectué plusieurs recherches sur Google mais je n'ai pas trouvé de solution à mon problème... Pourriez-vous m'indiquer ce qui cloche ?

    Où dois-je placer ce code (pour réutiliser la fonction générique) ? :

    procedure echange is new echange_gen(integer, integer);
    Merci d'avance !

  2. #2
    HRS
    HRS est déconnecté
    Membre confirmé
    Avatar de HRS
    Inscrit en
    Mars 2002
    Messages
    677
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 677
    Points : 638
    Points
    638
    Par défaut
    plutôt qu'une procédure générique, je propose un package générique qui
    peut contenir autant de procédures/fonctions que nécessaires)

    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
     
    ---
    --- packgen.ads
    ---
    GENERIC
       TYPE X IS PRIVATE;
    PACKAGE Packgen IS
       PROCEDURE Echange ( A, B : IN OUT X);
    END Packgen;
     
     
     
    ---
    --- packgen.adb
    ---
    with Ada.Text_Io; use Ada.Text_Io;
    with Ada.Integer_Text_Io; use Ada.Integer_Text_Io;
     
    package body packgen is
    procedure Echange (A, B : in out x) is
    temp : x;
    begin
    temp := a; a := b; b := temp;
    end Echange;
    end packgen;

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Bonjour,
    Alors si comme moi tu est en IUT premiere année, tu n'as pas encore travaillé sur les packages.
    C'est possible de créer des spécification d'un coté et le corps de l'autre, mais c'est une seul procedure ou fonction par fichier.
    Ton erreur vient de là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    with Ada.Text_Io; use Ada.Text_Io; <-- Pas obligatoire du tout
    with Ada.Integer_Text_Io; use Ada.Integer_Text_Io;<-- Pas obligatoire du tout
    with Echange_Gen;  <-- Tu n'as pas encore définie cet "objet générique" que tu veux l'utiliser
    
    procedure Echange_gen (A, B : in out x) is
    temp : x;
    begin
    temp := a; a := b; b := temp;
    end Echange_Gen;
    Pour l'instanciation de ta procedure, c'est dans ton programme (qui est un fichier a part)
    dans les premieres lignes, il faudra qu'il apparaise le with ...
    Au final cela devrais te donner ces fichiers :
    - echange_gen.ads
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    generic
    type TNimporteQuoi is private;
    procedure echange_gen (a, b : in out TNimporteQuoi);
    - echange_gen.adb
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure Echange_gen (A, B : in out TNimporteQuoi) is
    temp : TNimporteQuoi;
    begin
    temp := a; a := b; b := temp;
    end Echange_Gen;
    - TonFichierPrincipal.adb
    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
    with ada.integer_text_io;use ada.integer_text_io;
    with echange_gen; --:!:pas de "use" !!! 
    
    procedure Principale is
    -- Déclarations:
    x : integer;
    y : integer;
    
    procedure EchangeEnt is new echange_gen(integer);
    
    -- Instructions :
    Begin
         x := 1;
         y := 121;
         Put(x,4);Put(y,4);
         EchangeEnt(x, y);
         Put(x,4);Put(y,4);
    end principale;
    Voila, j'espère que ca t'aidera

  4. #4
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 102
    Points : 58
    Points
    58
    Par défaut
    Merci pour vos deux réponses je comprend à présent !

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 7
    Points : 5
    Points
    5
    Par défaut erreur compilation paquetages ADA.
    Bonjour,
    Je suis débutant en ADA et en autoformation, dans le paquetages ci-dessous
    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
     
                      package ES_Simples is 
     
                                                procedure Lire(F: out Float ) ; 
     
     
    				            procedure Afficher(F: in Float ) ; 
     
     
    				            procedure Afficher (S: in String ) ; 
     
    				            procedure Saut_Ligne( N: in Integer:=1);
     
     
    		        end ES_simples ;		    
     
     
     
     
                        with ada.text_io ;
     
              package body ES_Simples is
     
                  		   procedure Lire(F: out Float ) is
     
    			   F:Float ;
     
                               begin 
     
    			      get(F) ;
     
    			        end Lire ;
     
     
    			    procedure Afficher(F: in Float ) is
     
    			      F:Float ;
     
    			    begin
     
    			     put(F);
     
    			       end afficher ;
     
     
    			    procedure Afficher (S: in String ) is
     
    			      s:String ;
     
    			    begin 
     
    			     put(S) ;
     
    			        end afficher ;
     
     
    			    procedure Saut_Ligne( N: in Integer:=1) is 
     
    		             N:Integer:=1 ;
     
    		            begin 
     
    				put(N);
     
    				end Saut_ligne;
     
     
     
    end ES_Simples ;
    Seulement à la compilation j'obtient l'erreur suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     gnatmake trame_function_racine.adb
    gcc -c trame_function_racine.adb
    trame_function_racine.adb:13:26: keyword "body" expected here [see file name]
    gnatmake: "trame_function_racine.adb" compilation error
    Je comprends le sens du message qui dit que le mot clé body manque quelque part .
    Dans le code la partie corps à été implémentée et correctement il me semble , pourriez -vous m'aidez SVP.

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

Discussions similaires

  1. [architecture] pour de la généricité, vous feriez quoi ?
    Par Alec6 dans le forum Débats sur le développement - Le Best Of
    Réponses: 39
    Dernier message: 03/07/2006, 14h39
  2. Réponses: 6
    Dernier message: 21/11/2005, 13h40
  3. Explication Syntaxe , généricité ?
    Par elitost dans le forum Langage
    Réponses: 4
    Dernier message: 10/11/2005, 11h28
  4. [D7] généricité / portabilité d'une application
    Par Magnus dans le forum Bases de données
    Réponses: 7
    Dernier message: 01/09/2005, 08h39
  5. [Ada 95] Généricité de type/package
    Par kindool dans le forum Ada
    Réponses: 5
    Dernier message: 19/05/2005, 11h54

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