Ada:范围为1..var的自定义类型?

Ada:范围为1..var的自定义类型?,ada,Ada,我是Ada代码的初学者。我使用AdaCore的GPS 我将创建一个由用户决定大小的变量。 我这样写: -- My ada program -- with Ada.Text_IO, Ada.Integer_Text_IO; use Ada.Text_IO, Ada.Integer_Text_IO; procedure main is wanted : Integer := 10; type custom is range 0..wanted; ... 但第8行出现了问题: Bui

我是Ada代码的初学者。我使用AdaCore的GPS

我将创建一个由用户决定大小的变量。 我这样写:

-- My ada program --
with Ada.Text_IO, Ada.Integer_Text_IO;
use Ada.Text_IO, Ada.Integer_Text_IO;

procedure main is
   wanted : Integer := 10;

   type custom is range 0..wanted;
...
但第8行出现了问题:

Builder results
    C:\Users\**********\Desktop\ada project\src\main.adb
        8:26 "wanted" is not static constant or named number (RM 4.9(5))
        8:26 non-static expression used for integer type bound

我真的不明白这是什么意思。。。有人能帮我吗?

变量
想要的
不是常量,它可能在程序执行期间更改其值,因此在声明新类型时不允许将此变量用作范围约束。但是,您可以通过使用
常量
关键字(
所需:常量整数:=10;
)将其设置为常量。它应该能解决你的问题。

正如帖木儿所说,需要的范围必须是恒定的。这允许您做一些很好的事情,比如在过程中声明一个类型。看看这个,它可能很有趣:)

——我的ada程序--
使用Ada.Text\u IO、Ada.Integer\u Text\u IO;
使用Ada.Text\u IO、Ada.Integer\u Text\u IO;
主要程序是
程序测试(通缉:整数)为
类型自定义是新的整数范围0;
开始
放置线(“第一个值”和自定义图像(自定义“第一个”)
&“最后一个值”和自定义图像(自定义最后一个);
结束试验;
开始
试验(10);
试验(12);
端干管;
输出为

First value  0 Last value  10
First value  0 Last value  12
在这种情况下,您的类型与对另一个调用的类型不同,但它在过程中是常量,可以按需要工作。唯一的问题是定义的类型必须是参数类型的新派生类型


我让您考虑一下可能性:)

请注意,
类型custom之间的区别是范围0。。需要
类型自定义为新的整数范围0。。想要的
。是的,当然,因为想要的不是常数,所以您必须创建派生类型而不是类型,尽管这不容易找到为什么在ARM中可以:)