Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2951 connectés 

  FORUM HardWare.fr
  Programmation
  Ada

  [Ada][Resolu]Ambiguïté à l'appel d'une fonction en POO

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Ada][Resolu]Ambiguïté à l'appel d'une fonction en POO

n°2266458
Profil sup​primé
Posté le 25-09-2015 à 14:21:24  answer
 

Bonjour,
 
J'ai un problème d'embiguïté avec la POO à l'appel d'une fonction avec la fonction abstraite.
 
Voici mon code :
 

Code :
  1. -- Digializer is small virtual MIDI composer.
  2. -- Digitalizer Copyright 2015 (C) Manuel De Girardi.
  3. with Ada.Text_Io;
  4. with Ada.Integer_Text_Io;
  5. use Ada;
  6. with Digitalizer.MIDI.GM_Instruments;
  7. with Digitalizer.MIDI.GM_Instruments.Virus;
  8. use Digitalizer.MIDI.GM_Instruments;
  9. use Digitalizer.MIDI.GM_Instruments.Virus;
  10. use Digitalizer;
  11. with Digitalizer.Composer;
  12. procedure Main is      
  13. begin
  14.  
  15.   declare
  16.            
  17.      VirusTI2 : VirusTI2_Type;      
  18.      package Composer is new Digitalizer.Composer(GM_Instrument => VirusTI2);
  19.   begin
  20.      
  21.      Text_Io.Put_Line("GM Instrument Id : " );
  22.      Integer_Text_Io.Put(Composer.Instrument_Id);
  23.      Text_Io.New_Line;
  24.   end;
  25. end Main;


Code :
  1. package Digitalizer is  
  2.   pragma Pure (Digitalizer);
  3. end Digitalizer;


Code :
  1. with Interfaces.C;
  2. use Interfaces;
  3. package Digitalizer.MIDI is
  4.  
  5.   type MIDI_Name_Type is (VirusTI2);
  6.  
  7. end Digitalizer.MIDI;


Code :
  1. package Digitalizer.MIDI.GM_Instruments is
  2.      
  3.   type GM_Instrument_Type(MIDI_Name : MIDI_Name_Type) is
  4.     abstract
  5.     tagged
  6.      record
  7.         null;
  8.      end record;
  9.  
  10.   function Instrument_Id (GM_Instrument : in GM_Instrument_Type'Class)
  11.                          return Integer is abstract;        
  12. end Digitalizer.MIDI.GM_Instruments;


Code :
  1. package Digitalizer.MIDI.GM_Instruments.Virus is
  2.      
  3.   type VirusTI2_Type is new GM_Instrument_Type(VirusTI2) with
  4.      record
  5.         Identifiant : Integer := 0;
  6.      end record;
  7.  
  8.   function Instrument_Id (VirusTI : in VirusTI2_Type)
  9.                          return Integer;      
  10. end Digitalizer.MIDI.GM_Instruments.Virus;


Code :
  1. package body Digitalizer.MIDI.GM_Instruments.Virus is
  2.  
  3.   function Instrument_Id (VirusTI : in VirusTI2_Type'Class) return Integer is
  4.   begin
  5.      return VirusTI.Identifiant;
  6.   end Instrument_Id;
  7.  
  8. end Digitalizer.MIDI.GM_Instruments.Virus;


Code :
  1. with Digitalizer.MIDI.GM_Instruments;
  2. use Digitalizer.MIDI;
  3. generic
  4.   GM_Instrument : MIDI.GM_Instruments.GM_Instrument_Type 'Class;
  5. package Digitalizer.Composer is
  6.   function Instrument_Id return Integer;  
  7. end Digitalizer.Composer;


 

Code :
  1. with Digitalizer.MIDI.GM_Instruments;
  2. use Digitalizer.MIDI;
  3. generic
  4.   GM_Instrument : MIDI.GM_Instruments.GM_Instrument_Type 'Class;
  5. package Digitalizer.Composer is
  6.   function Instrument_Id return Integer;
  7. end Digitalizer.Composer;


Code :
  1. with Digitalizer.MIDI.GM_Instruments.Virus;
  2. use Digitalizer.MIDI.GM_Instruments.Virus;
  3. package body Digitalizer.Composer is
  4.  
  5.   function Instrument_Id return Integer is
  6.   begin
  7.      case Gm_Instrument.MIDI_Name is
  8.         when VirusTI2 =>
  9.            return VirusTI2_Type(GM_Instrument).Instrument_Id;
  10.         when others =>
  11.            raise Program_Error;
  12.      end case;
  13.   end Instrument_Id;
  14. end Digitalizer.Composer;


 
 
Gnat me répond ceci :
 

Citation :

digitalizer-composer.adb:9:48: ambiguous expression (cannot resolve "Instrument_Id" )
digitalizer-composer.adb:9:48: possible interpretation at digitalizer-midi-gm_instruments-virus.ads:8
digitalizer-composer.adb:9:48: possible interpretation at digitalizer-midi-gm_instruments.ads:10


 
 
Merci pour votre investissement.


Message édité par Profil supprimé le 25-09-2015 à 20:31:29
mood
Publicité
Posté le 25-09-2015 à 14:21:24  profilanswer
 

n°2266479
Profil sup​primé
Posté le 25-09-2015 à 20:30:04  answer
 

Solution : supprimer l'attribut 'Class aux type de paramètre de la fonction Instrument_Id.
 
Merci.


Message édité par Profil supprimé le 25-09-2015 à 20:30:42

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Ada

  [Ada][Resolu]Ambiguïté à l'appel d'une fonction en POO

 

Sujets relatifs
[C++11] fonction renvoyant une reference sur un tableau de 10 string[VBA] Créer une fonction "Recherche", "Bug liste déroulante" ...
Liste utilisateur AD fonction de plusieurs criteresProblème avec $this avec la POO
Menu externe avec fonction include et class:activeMenu externe avec fonction include et class:active
optimisationExcel : passer un range "complexe" à une fonction
Incrementer en fonction de l'annéeAppel d'une autre page a partir d'une page HTML ou PHP
Plus de sujets relatifs à : [Ada][Resolu]Ambiguïté à l'appel d'une fonction en POO


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR