如何使用来自私人部分的规格?

时间:2015-01-04 09:04:51

标签: private ada put

如何使用来自私人部分的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;

1 个答案:

答案 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;