package Bird_Package is
type Bird_Type is tagged private;
procedure Init(A_Bird : out Bird_Type; Name : in String);
function Name(A_Bird : in Bird_Type) return String;
function Call(A_Bird : in Bird_Type) return String;
function Type_Name(A_Bird : in Bird_Type) return String;
procedure Put(A_Bird : in Bird_Type);
private
type Bird_Type is tagged record
My_Name : String (1..6);
end record;
end Bird_Package;
Package Body Bird_Package is
procedure Init(A_Bird: out Bird_Type; Name : in String) is
begin
A_Bird.My_Name := Name;
end Init;
function Name(A_Bird : in Bird_Type) return String is
begin
return A_Bird.A_Name;
end Name;
function Call(A_Bird : in Bird_Type) return String is
begin
return "Squawwwwwwk!";
end Call;
function Type_Name(A_Bird : in Bird_Type) return String is
begin
return "Bird";
end Type_Name;
procedure Put(A_Bird : in Bird_Type'Class) is
begin
Put(Name(A_Bird));
Put(' ');
Put(Type_Name(A_Bird));
Put(" says ");
Put(Call(A_Bird));
end Put;
end Bird_Package;
我有一個包體的問題我不明白Bird_Type'Class是什麼,所以我不知道如何將它應用到我的客戶端程序。它一直告訴我預期的類型是Bird_Type'Class,但它找到的類型是標準字符串。幫助表示讚賞,謝謝Ada包體不編譯
是否有一個程序或功能,我可以添加到修復身體,所以它會工作? –
您似乎想要使用Ada.Text_IO中的Put過程,但是沒有上下文子句指出對Ada.Text_IO的依賴關係。在Put過程中,您在傳遞一個字符串時調用Put,但包中唯一的Put過程是您使用Bird_Type'Class的參數定義的Put過程。順便說一下,Put包體中的參數爲Bird_Type'Class,而包中的Put爲一個Bird_Type類型。它們不是同一件事。 Bird_Type'Class是以Bird_Type爲根的任何類型,或從Bird_Type繼承的類型。 –
這是它給我的方式,我必須保持Bird_Type在規範中,而Bird_Type'Class在身體中。我需要在程序和函數中進行編譯,但是我不知道如何執行 –