ADA整数类型?

ADA整数类型?,ada,Ada,i) 第9行将出现错误My_DigitT新类型, 所以MD不能被分配给D ii)第10行将出现越界异常, 您可以通过更改类型数字为mod 10来消除此问题 有人能帮忙核实这些答案吗 (关于问题一) 这是我将MD类型转换为数字的解决方案吗?顺便说一句,我厌倦了一个在线编译器,我得到了错误rextester.com/CFFFCP14315–@johnkdoallisson我回答了你的问题,因为你需要更详细的帮助。 您更改的代码如下所示: procedure Main is type Digit

i) 第9行将出现错误
My_DigitT
新类型, 所以MD不能被分配给D

ii)第10行将出现越界异常, 您可以通过更改
类型数字为mod 10
来消除此问题

有人能帮忙核实这些答案吗

(关于问题一)


这是我将MD类型转换为数字的解决方案吗?顺便说一句,我厌倦了一个在线编译器,我得到了错误rextester.com/CFFFCP14315–

@johnkdoallisson我回答了你的问题,因为你需要更详细的帮助。 您更改的代码如下所示:

procedure Main is
   type Digit_T is range 0..9;
   type My_Digit_T is new Digit_T;
   D : Digit_T;
   MD : My_Digit_T(Digit_T); -- This line is not correct.
begin
   D := 0;
   MD := D;
   D := D + 5 + 5;
end Main;
我使用的GNAT编译器报告以下问题:

不能将一种类型转换为另一种类型(第5行)。 分配MD:=D会导致第8行出现警告。数字\u T的范围为0到9。表达式D:=D+5+5;生成一个值10,该值不在数字\u T的有效值集内

如果要将D分配给MD,则它们必须是相同类型的成员,或者D必须转换为My_Digit_T的实例。请注意,您可以将实例转换为其他类型,但您已尝试将类型转换为其他类型。 另一个解决方案是将My_Digit作为Digit的子类型,而不是将其作为单独的类型

对变量D使用适当类型转换的解决方案是:

procedure Main is
   type Digit_T is mod 10;
   type My_Digit_T is new Digit_T;
   D : Digit_T;
   MD : My_Digit_T;
begin
   D := 0;
   MD := My_Digit_T(D);
   D := D + 5 + 5;
end Main;
类型数字\u T已更改为模块化类型。模块类型采用模块运算,因此所有加法运算产生的值都在声明的值范围内。在这种情况下,有效值的范围仍然是0..9,但5+5的结果是0(10模10为0)


我将使用子类型的解决方案留给您。

1)没有回答:有两种方法可以修复错误。2) 没有指定实际引发的异常。请发布代码,而不是代码的图像。您的答案似乎正确,但您没有解释两种不同的方法来修复编译错误。@JimRogers Hi Jim,Thanks@johnKDOEALLISSON:查看Ada类型转换可能有助于确定两种不同的方法来修复错误。
procedure Main is
   type Digit_T is mod 10;
   type My_Digit_T is new Digit_T;
   D : Digit_T;
   MD : My_Digit_T;
begin
   D := 0;
   MD := My_Digit_T(D);
   D := D + 5 + 5;
end Main;