Hello!

Inspiré(e) de prendre part à la discussion ? Ou de poser une question ou demander de l’aide ?

Alors bienvenues dans les grands sujets des forums de La Bulle : m’inscrire.

Cette partie du forum n’est pas compatible avec les bloqueurs publicitaires

Félicitations à vous, de préférer les accès payants plutôt que la gratuité par la publicité, c’est honnorable et cohérent de votre part. Malheureusement, l’accès payant par micropaiement (qui serait d’environ 1 cent pour 20 pages consultées) n’est pour l’instant pas encore mis en place, et l’accès gratuit sans publicité, est réservé aux membres actif(ve)s du forum. En attendant, si vous souhaitez poursuivre votre visite chez nous, vous pouvez ajouter le site à votre liste blanche, ou encore mieux, désactiver le bloqueur partout. Pour ajouter le site à votre liste blanche, pour Firefox (similaire pour les autres navigateurs), rendez‑vous en bas à gauche de la fenêtre de votre navigateur, et cliquez sur le menu comme dans l’exemple de l’image ci‑dessous, puis rechargez la page, en appuyant sur F5.

Ambiguïté avec une fonction abstraite : POO
Auteur Message
Beau Parleur
Beau Parleur
Avatar de l’utilisateur
  • Genre : Télétubbie
  • Messages : 320
Ven 25 Sep 2015 14:34
Message Ambiguïté avec une fonction abstraite : POO
Bonjour,
J'ai un problème, j'ai pas suivi de cours OO et j'arrive pas à saisir comment écrire la suite sans avoir de problème avec Gnat.

Le problème est un problème d'ambiguïté avec une fonction abstraite.

Voici l'erreur :
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


Voici mes codes :


Source ada : 

package Digitalizer is   
pragma Pure (Digitalizer);
end Digitalizer;

Source ada : 

with Interfaces.C;
use Interfaces;
package Digitalizer.MIDI is

type MIDI_Name_Type is (VirusTI2);

end Digitalizer.MIDI;

Source ada : 

package Digitalizer.MIDI.GM_Instruments is

type GM_Instrument_Type(MIDI_Name : MIDI_Name_Type) is
abstract
tagged
record
null;
end record;

function Instrument_Id (GM_Instrument : in GM_Instrument_Type'Class)
return Integer is abstract;
end Digitalizer.MIDI.GM_Instruments;

Source ada : 

package Digitalizer.MIDI.GM_Instruments.Virus is

type VirusTI2_Type is new GM_Instrument_Type(VirusTI2) with
record
Identifiant : Integer := 0;
end record;

function Instrument_Id (VirusTI : in VirusTI2_Type)
return Integer;
end Digitalizer.MIDI.GM_Instruments.Virus;

Source ada : 

package body Digitalizer.MIDI.GM_Instruments.Virus is

function Instrument_Id (VirusTI : in VirusTI2_Type'Class) return Integer is
begin
return VirusTI.Identifiant;
end Instrument_Id;

end Digitalizer.MIDI.GM_Instruments.Virus;

Source ada : 

with Digitalizer.MIDI.GM_Instruments;
use Digitalizer.MIDI;
generic
GM_Instrument : MIDI.GM_Instruments.GM_Instrument_Type 'Class;
package Digitalizer.Composer is
function Instrument_Id return Integer;
end Digitalizer.Composer;

Source ada : 

with Digitalizer.MIDI.GM_Instruments.Virus;
use Digitalizer.MIDI.GM_Instruments.Virus;
package body Digitalizer.Composer is

function Instrument_Id return Integer is
begin
case Gm_Instrument.MIDI_Name is
when VirusTI2 =>
return VirusTI2_Type(GM_Instrument).Instrument_Id;
when others =>
raise Program_Error;
end case;
end Instrument_Id;
end Digitalizer.Composer;





Source ada : 

-- Digializer is small virtual MIDI composer.
-- Digitalizer Copyright 2015 (C) Manuel De Girardi.
with Ada.Text_Io;
with Ada.Integer_Text_Io;
use Ada;
with Digitalizer.MIDI.GM_Instruments;
with Digitalizer.MIDI.GM_Instruments.Virus;
use Digitalizer.MIDI.GM_Instruments;
use Digitalizer.MIDI.GM_Instruments.Virus;
use Digitalizer;
with Digitalizer.Composer;
procedure Main is
begin

declare

VirusTI2 : VirusTI2_Type;
package Composer is new Digitalizer.Composer(GM_Instrument => VirusTI2);
begin

Text_Io.Put_Line("GM Instrument Id : ");
Integer_Text_Io.Put(Composer.Instrument_Id);
Text_Io.New_Line;
end;
end Main;



Je souhaiterais simplement récupérer l'Id de l'istrument VirusTI2.


Si vous pouviez me donner un petit coup de main ?
S'il vous plaît !
Merci.
Profil
zen
Modératrice
Avatar de l’utilisateur
  • Genre : Fille
  • Age : 50
  • Localisation : Un pied dans l'eau et un sur le mont.
  • Messages : 11009
Ven 25 Sep 2015 19:10
Message Re: Ambiguïté avec une fonction abstraite : POO
Image Peut être que Hibou pourra t'aider mais moi en tout cas je sèche complètement. Ce n'est vraiment pas du tout ma partie. Désolée.
Profil
Beau Parleur
Beau Parleur
Avatar de l’utilisateur
  • Genre : Télétubbie
  • Messages : 320
Ven 25 Sep 2015 19:22
Message Re: Ambiguïté avec une fonction abstraite : POO
Bonjour Zen !

Je peux pas t'aider pour comprendre, je n'y connais pas grand chose non plus.

Néanmoins, j'ai solutionné mon problème.

En fait, j'ai mal placé l'attribut 'Class aux paramètres de la fonction Instrument_Id.

En supprimant cet attribut des paramètres, ça compile bien.

Merci à toi en tout cas.
Et merci à Hibou quand même.
Profil