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