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 :

Erreur de compilation avec Ada.Strings.Unbounded


Sujet :

Ada

  1. #1
    Membre habitué Avatar de semaj_james
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 193
    Points : 139
    Points
    139
    Par défaut Erreur de compilation avec Ada.Strings.Unbounded
    Bonjour,

    En modifiant un exemple du cours 1 de Daniel Feneuille pour la Lecture et écriture de variables de type ENTIER (p78) j'ai une erreur de compilation.

    voici le code:
    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
    with Ada.Text_IO, Ada.Integer_Text_IO,Ada.Strings.Unbounded, machine, client;
    use Ada.Text_IO, Ada.Integer_Text_IO,Ada.Strings.Unbounded, machine, client;
    procedure clientServ is
     
       procedure GET(ENTIER : out Integer) is
          REPONSE : Unbounded_String;  
          LONG : NATURAL;      
       begin    
          loop       
             begin
                REPONSE := Get_Line;   => E R R E U R
                ENTIER := Integer'VALUE(To_String(REPONSE));           
                exit;     
             exception when others =>
                   PUT_LINE("Saisie non valable recommencez");              
             end;         
          end loop;     
       end GET;
    ...
    end clientServ;
    expected private type "Ada.Strings.Unbounded.Unbounded_String"
    found type "Standard.String"
    ca veut dire qu'il ne trouve pas Ada.Strings.Unbounded ? J'ai pourtant tout telecharger sur GNAT GPL Edition
    Est ce normal qu'il n'y soit pas ?

  2. #2
    Membre éprouvé
    Avatar de Celelibi
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 087
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 087
    Points : 1 122
    Points
    1 122
    Par défaut
    À supposer que tu compile en Ada 2005, la fonction Get_Line renvoie une valeur de type String. Cette fonction n'est pas surchargée par le package Ada.Strings.Unbounded.
    Soit il faut convertir le résultat en Get_Line en Unbounded_String, soit il faut aussi inclure le package Ada.Strings.Unbounded.Text_IO.
    Les vaches ne peuvent PAS voler, quoi qu'elles aient pu vous raconter.

  3. #3
    Membre habitué Avatar de semaj_james
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 193
    Points : 139
    Points
    139
    Par défaut
    En ajoutant le package Ada.Strings.Unbounded.Text_IO j'ai sur cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    REPONSE : Unbounded_String;
    l'erreur:
    Unbounded_String is not visible

  4. #4
    Membre habitué
    Inscrit en
    Décembre 2004
    Messages
    119
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 119
    Points : 156
    Points
    156
    Par défaut
    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
     
    with Ada.Strings.Unbounded;
    with Ada.Strings.Unbounded.Text_Io;
    with Text_Io;
     
     
    procedure Toto is
      Reponse : Ada.Strings.Unbounded.Unbounded_String;  
      Valeur  : Natural;
    begin    
      loop       
        begin
          Reponse := Ada.Strings.Unbounded.Text_Io.Get_Line; 
          Valeur  := Integer'Value(Ada.Strings.Unbounded.To_String(Reponse));  
          Text_Io.Put_Line("valeur lue " & Integer'Image(Valeur));
          exit;     
        exception 
          when others =>
            Text_Io.Put_Line("Saisie non valable recommencez");
        end;         
      end loop;     
    end Toto;
    Ce code marche.
    Je ne sais pas d'ou vient ton probleme, mais un detail, evite de coller des use partout tu vas avoir des problemes ....

    Sinon, question bete, pourquoi vouloir utiliser des Unbounded ici au lieu d'utiliser directement Integer_Io?

  5. #5
    Membre éprouvé
    Avatar de Celelibi
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 087
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 087
    Points : 1 122
    Points
    1 122
    Par défaut
    jc-miranda, je pense que justement il avait oublié de mettre use Ada.Strings.Unbounded.Text_IO.


    /me pour l'utilisation des use.
    Les vaches ne peuvent PAS voler, quoi qu'elles aient pu vous raconter.

  6. #6
    Membre habitué
    Inscrit en
    Décembre 2004
    Messages
    119
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 119
    Points : 156
    Points
    156
    Par défaut
    Citation Envoyé par Celelibi
    /me pour l'utilisation des use.
    Vu que tu ajoutes cela, tu peux m'expliquer pourquoi?

    Des use tres limites sur certains packages oui, mais l'abus de use rend ton code difficile a suivre et surtout risque de provoquer des problemes joyeux.
    Pourquoi vouloir eliminer une info de son code? Pour le sport?

    A la rigueur des "use type" localises a des procedures pour l'acces aux operateurs, ok.
    Mais inonde son package de use, c'est chercher les ennuis.

    Et quand on me dit que c'est chiant a ecrire, je preciserai que par contre ca rend les choses beaucoup plus faciles a lire.... et tu relis en general un package plus de fois que tu ne l'ecris ... sans compter tes collegues qui te remercieront.

    A+

    Juan

  7. #7
    Membre éprouvé
    Avatar de Celelibi
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 087
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 087
    Points : 1 122
    Points
    1 122
    Par défaut
    Quelque soit le programme, tu n'es pas censé inclure deux packages qui font la même chose. Si deux packages font des choses différentes, le nom des types/fonctions/procédures sera différent, il n'y a donc normalement aucun conflit ni aucune ambiguïté.

    Au final ça donne à mon avis du code pas plus difficile à lire, mais plus rapide à écrire. Le code sera peut-être même plus facile à lire. Personnellement lire un code blindé de trucs du genre Mon_Package.Foo("bar", Mon_Autre_Package.Bar("foo")) c'est pas ce que je trouve des plus aisé à lire comparé à Foo("bar", Bar("foo"));.

    Mais ce n'est que mon avis perso.


    PS : Ceci est le sujet de troll du langage Ada.
    Les vaches ne peuvent PAS voler, quoi qu'elles aient pu vous raconter.

  8. #8
    Membre actif

    Homme Profil pro
    Software Engineer
    Inscrit en
    Août 2004
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2004
    Messages : 173
    Points : 220
    Points
    220
    Par défaut
    Perso depuis mon dernier soucis en date qui m'a valu une bonne heure de recherche j'utilise de moins en moins la clause "use"
    Mon probleme était sur la programmation d'une petite calculatrice
    J'utilisais un package générique de Pile , 2 fois , une fois pour stocker des entier l'autre fois pour stocker des caractères.
    J'ai mis un moment avant de m'apercevoir qu'il y avait conflit dans les instanciations

Discussions similaires

  1. Erreur de compilation avec les string et char*
    Par number9 dans le forum C++
    Réponses: 3
    Dernier message: 30/04/2012, 09h58
  2. Erreur de compilation sur std::string avec Dev C++
    Par dada57 dans le forum Dev-C++
    Réponses: 4
    Dernier message: 20/03/2006, 18h06
  3. Erreur de compil avec Outp
    Par sixon dans le forum C++
    Réponses: 2
    Dernier message: 27/02/2006, 15h01
  4. Erreur de compilation avec SWITCH et CASE
    Par barbarello dans le forum C++
    Réponses: 4
    Dernier message: 21/01/2006, 21h47
  5. [FreePascal]Erreur de compilation avec Dev-Pascal
    Par youngeikichi dans le forum Free Pascal
    Réponses: 3
    Dernier message: 17/02/2005, 14h22

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