手表中不存在 Ada83 约束错误 Window
Ada83 Constraint Error not Present in Watch Window
当 运行 这段代码时,我正在查看约束错误。在调试器中,它停在第二行 (Menu_Text...)。我把作业的RHS上的代码放到watch window里,我看不出问题。它的评估完全正确。
for I in 1..This_Info_Ptr.Child_Menu_Length loop
Menu_Text := This_Info_Ptr.Child_Menu_Text_Ptr.all(I-1);
Menu_State := This_Info_Ptr.Child_Menu_States_Ptr.all(I-1);
...
错误是在我为1的时候,我已经确认这段代码在手表上有效window:
This_Info_Ptr.Child_Menu_Text_Ptr.all(I-1)
Child_Menu_Text_Ptr 和 Child_Menu_States_Ptr 指向数组(字符串和枚举),
我一般应该怎么调试呢?我看不出代码有什么问题。但是,我对 Ada 访问类型的熟悉程度有限。 ..._Ptr 变量是访问类型。
我正在使用 GNAT。
您没有显示足够多的源文本来确定发生了什么。 This_Info_Ptr.Child_Menu_Text_Ptr.all
是函数还是数组?它的规格是什么?
如果它是一个数组,你应该记住 Ada 允许数组被任何离散类型索引,并且 Ada 中的数组总是知道它们自己的索引边界。
假设被索引的数组都具有相同的维度和相同的索引类型,那么应该使用 'first
& 'last
或 'range
属性对它们进行迭代.
长度值的手写控制很可能有错误。
使用内置功能更安全可靠。
当 运行 这段代码时,我正在查看约束错误。在调试器中,它停在第二行 (Menu_Text...)。我把作业的RHS上的代码放到watch window里,我看不出问题。它的评估完全正确。
for I in 1..This_Info_Ptr.Child_Menu_Length loop
Menu_Text := This_Info_Ptr.Child_Menu_Text_Ptr.all(I-1);
Menu_State := This_Info_Ptr.Child_Menu_States_Ptr.all(I-1);
...
错误是在我为1的时候,我已经确认这段代码在手表上有效window:
This_Info_Ptr.Child_Menu_Text_Ptr.all(I-1)
Child_Menu_Text_Ptr 和 Child_Menu_States_Ptr 指向数组(字符串和枚举),
我一般应该怎么调试呢?我看不出代码有什么问题。但是,我对 Ada 访问类型的熟悉程度有限。 ..._Ptr 变量是访问类型。
我正在使用 GNAT。
您没有显示足够多的源文本来确定发生了什么。 This_Info_Ptr.Child_Menu_Text_Ptr.all
是函数还是数组?它的规格是什么?
如果它是一个数组,你应该记住 Ada 允许数组被任何离散类型索引,并且 Ada 中的数组总是知道它们自己的索引边界。
假设被索引的数组都具有相同的维度和相同的索引类型,那么应该使用 'first
& 'last
或 'range
属性对它们进行迭代.
长度值的手写控制很可能有错误。 使用内置功能更安全可靠。