如何使用来自私人部分的put来自spec?我无法使用put请帮助解决以下是我的代码
p.ads(SPEC)
package p is
type t is private;
give_public_acess:constant t;
private
type t is range 1..10;
give_public_acess:Constant t:=9;
end p;
private_acc.adb
with ada.Text_IO,ada.Integer_Text_IO;
with p;
procedure private_acc is
package my_type is new ada.Text_IO.Integer_IO(p.t);
v:p.t;
begin
v:=p.give_public_acess;
my_type.put(v); -- How to print every thing? Is it ok just put is not good here. please help me to fix?
end private_acc;
答案 0 :(得分:3)
你的类型t是私有的,所以private_acc无法知道它是一个整数,浮点数还是任何东西(这是私有类型的全部要点)。
如果您希望能够显示它们,那么您需要从包p中导出其他子程序可以调用的Put方法。
所以
package p is
type t is private;
procedure Put (Item : T);
...
这可能意味着P的包体需要实例化Ada.Text_IO.Integer_IO; 或者,您可以将其实例化为包P的私有子包,然后包体将执行对Put的调用。
编辑:添加了包体......
with Ada.Text_IO.Integer_IO;
package body P is
package T_IO is new Ada.Text_IO.Integer_IO(T);
procedure Put(Item : T) is
begin
T_IO.Put(Item); -- call through.
end;
end P;