使用 Ada.Text_IO.Integer_IO

Using Ada.Text_IO.Integer_IO

我正在尝试编写以下程序:

with Ada.Text_IO;

procedure Main is

   type T is range 0 .. 18;
   package IO is new Ada.Text_IO.Integer_IO (T);

begin

   IO.Put (1);

end Main;

但是当我尝试编译时,我收到以下错误消息:

main.adb:6:04: info: in instantiation at a-tiinio.ads:51
main.adb:6:04: info: "IO" requires body ("Get" requires completion)
main.adb:6:04: info: in instantiation at a-tiinio.ads:56
main.adb:6:04: info: "IO" requires body ("Get" requires completion)
main.adb:6:04: info: in instantiation at a-tiinio.ads:60
main.adb:6:04: info: "IO" requires body ("Put" requires completion)
main.adb:6:04: info: in instantiation at a-tiinio.ads:66
main.adb:6:04: info: "IO" requires body ("Put" requires completion)
main.adb:6:04: info: in instantiation at a-tiinio.ads:71
main.adb:6:04: info: "IO" requires body ("Get" requires completion)
main.adb:6:04: info: in instantiation at a-tiinio.ads:76
main.adb:6:04: info: "IO" requires body ("Put" requires completion)
a-tiinio.adb:59:07: (style) maximum nesting level exceeded
a-tiinio.adb:79:07: (style) maximum nesting level exceeded
a-tiinio.adb:100:07: (style) maximum nesting level exceeded
a-tiinio.adb:121:07: (style) maximum nesting level exceeded
a-tiinio.adb:134:07: (style) maximum nesting level exceeded
a-tiinio.adb:147:07: (style) maximum nesting level exceeded

据我从手册的A.10.8部分了解到,Integer_IO是一个需要用有符号整数实例化的通用包。我也试过 subtype T is IntegerPositive,但我得到了同样的错误。

我做错了什么?

您似乎在编译器开关“-gnatyL”提供的样式检查中设置了不适当的最大嵌套级别,然后通过“-gnatwe”开关将编译器设置为将所有警告和样式检查视为错误。

您的编译器安装可能有问题。我可以毫无问题地使用 gnatmake main.adb 构建您的代码。您在命令行或任何 IDE?

中使用 gnatmake

无论如何,我会向您推荐以下...

您可以使用包 "Ada.Integer_Text_IO",例如:

with Ada.Integer_Text_IO; use Ada.Integer_Text_IO;

现在您可以拨打:put(1);

这可能是放置整数最舒服的方式!