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 étrange : ambiguous expression


Sujet :

Ada

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Erreur de compilation étrange : ambiguous expression
    Bonjour,

    J'ai une erreur etrange a la compilation du programme suivant :

    ambiguite.ads :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    package ambiguite is
     
       type A is null record;   
       type B is private;
       function B_Vers_A(Un_B: in B) return A;
       --seconde 'interpretation possible'
       procedure P(Un_A: in A);
     
    private
       --premiere 'interpretation possible'
       type B is new A;
    end ambiguite;
    ambiguite.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
    package body ambiguite is
       function B_Vers_A(Un_B: in B) return A is
       begin
       	return A(Un_B);
       end B_Vers_A;
     
       procedure P(Un_A: in A) is
       begin
       	null;
       end P;
     
       Un_B : B;
    begin
            --L'endroit ou l'erreur se produit
    	P(B_vers_A(Un_B));
    end ambiguite;
    L'erreur est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ambiguite.adb:14:09: ambiguous expression (cannot resolve "P")
    ambiguite.adb:14:09: possible interpretation at ambiguite.ads:9
    ambiguite.adb:14:09: possible interpretation at ambiguite.ads:6
    (j'utilise gnat 4.1 sous linux; commande : gnatmake ambiguite -o test)

    L'erreur ne se produit pas dans les cas suivant :
    -si l'appel qui pose probleme est fait hors du fichier ambiguite.adb.
    -si le type B n'est pas private
    -si le type B ne 'derive' pas de A (en adaptant le code de B_vers_A evidement)

    J'ai demande a mon prof qui n'a pas su m'indiquer ce qui n'allait pas avec mon code.
    Quelqu'un saurait me dire d'ou vient le probleme s'il vous plait ?


    Cordialement.

  2. #2
    Inactif Avatar de Hibou57
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    852
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 852
    Points : 493
    Points
    493
    Par défaut
    Etrange, oui. La seule choe qui me semble certaine, c'est que ça a à voir avec le type de l'argument de P. Comme s'il ne savait pas de quel type est l'argument que tu lui donne... alors que le type de B_vers_A est pourtant bien clair.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 90
    Points : 100
    Points
    100
    Par défaut
    B_Vers_A et P sont considérées comme des opérations primitives de A car elles sont déclarées dans le même package.
    (cf ARM 3.2.3(6))

    Dans la section private, B dérive de A et hérite donc de ses opérations primitives.
    (cf ARM 7.3(16/2))

    Les fonction et procédure suivantes sont implicitement créées :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     function B_Vers_A(Un_B: in B) return B;
     procedure P(Un_A: in B) return B;
    (cf ARM 3.4(18/2))

    D'ailleurs leur ajout ne devrait pas modifier le message d'erreur.

    Cette ambiguité existe dans le corps du package et aussi dans les unités enfants, mais pas hors de la hiérarchie du package car l'héritage n'est visible que dans la section private.

    Si le type B est défini :
    • avant P et B_Vers_A : les opérations ne sont plus primitives de A et il n'y a plus d'héritage ni d'ambiguité
    • après P et B_Vers_A : opérations primitives héritées causant ambiguité

    (cf ARM 3.4(23/2))

    Un moyen simple de résoudre l'ambiguité est de qualifier la valeur de retour de B_Vers_A :
    ou

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Hum... je crois que je ne suis pas encore pret pour la facon de penser ada...

    En tous cas, merci infiniement pour ta reponse

  5. #5
    Inactif Avatar de Hibou57
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    852
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 852
    Points : 493
    Points
    493
    Par défaut
    Citation Envoyé par boromir73 Voir le message
    B_Vers_A et P sont considérées comme des opérations primitives de A car elles sont déclarées dans le même package.
    (cf ARM 3.2.3(6))
    [...]
    Millions de merci Boromir Ce fut un plaisir de te lire, et j'ai appris des choses que j'ignorais (l'interprétation en tant que primitive).

    On espère te revoir ici souvent (hourra)

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

Discussions similaires

  1. Pourquoi "Erreur de compilation de l'expression"
    Par Sofie109 dans le forum Access
    Réponses: 18
    Dernier message: 19/09/2014, 07h40
  2. Des erreurs de compilation étrange
    Par Invité dans le forum C++
    Réponses: 5
    Dernier message: 27/12/2010, 17h04
  3. Réponses: 3
    Dernier message: 15/05/2009, 16h18
  4. Erreur de compilation étrange
    Par djaibi dans le forum C++
    Réponses: 8
    Dernier message: 27/03/2009, 04h57
  5. Erreur de compilation étrange
    Par poukill dans le forum C++
    Réponses: 5
    Dernier message: 19/10/2007, 09h55

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