Ada:具有自定义类型的put()

lau*_*tin 1 ada

我在寻找一种将Put()函数与我创建的自定义类型一起使用的方法。我该怎么办?

with Ada.Text_IO, Ada.Integer_Text_IO;
use Ada.Text_IO, Ada.Integer_Text_IO;

procedure main is
   type count is range -2..2 ;
begin
      Put(counter);
end main;
Run Code Online (Sandbox Code Playgroud)

这就是我得到的:

Builder results
    C:\Users\***********\Desktop\ada project\src\main.adb
        26:11 expected type "Standard.Integer"
        26:7 no candidate interpretations match the actuals:
        26:7 possible missing instantiation of Text_IO.Integer_IO
Run Code Online (Sandbox Code Playgroud)

Dee*_*Dee 5

您缺少实例,Counter并且没有子程序Put接受type参数Count。一些选项:

  • 选项1-使用Image属性。
with Ada.Text_IO;

procedure Main is
   type Count is range -2 .. 2;   
   Counter : Count := 1;   
begin
   Ada.Text_IO.Put (Counter'Image);   -- Counter'Image returns a String
   -- or 
   Ada.Text_IO.Put (Count'Image (Counter));
end Main;
Run Code Online (Sandbox Code Playgroud)
  • 选项2-强制键入Integer。
with Ada.Integer_Text_IO;

procedure Main is
   type Count is range -2 .. 2;   
   Counter : Count := 1;    
begin
   Ada.Integer_Text_IO.Put (Integer (Counter));  
end Main;
Run Code Online (Sandbox Code Playgroud)
  • 选项3-定义子类型而不是类型。
with Ada.Integer_Text_IO;

procedure Main is
   subtype Count is Integer range -2 .. 2;   
   Counter : Count := 1;  
begin
   Ada.Integer_Text_IO.Put (Counter);  
end Main;
Run Code Online (Sandbox Code Playgroud)
  • 选项4-实例化通用包Ada.Text_IO.Integer_IO。
with Ada.Text_IO;

procedure Main is

   type Count is range -2 .. 2;   
   Counter : Count := 1; 

   package Count_Text_IO is
      new Ada.Text_IO.Integer_IO (Count);   

begin
   Count_Text_IO.Put (Counter);   
end Main;
Run Code Online (Sandbox Code Playgroud)