Matrix 无效索引约束
我在ada中定义了一个矩阵类型,如下所示:Matrix 无效索引约束,matrix,slice,ada,Matrix,Slice,Ada,我在ada中定义了一个矩阵类型,如下所示: 类型矩阵类型是项类型的数组(自然范围,自然范围); 为了对输入矩阵应用一些变换,我需要在函数中定义一个矩阵切片 我试着用下面的方法来做 procedure Do_Stuff(M: Matrix_Type) is -- c needs to be half as big as the input matrix M C: Matrix_Type(A'Length / 2, A'Length / 2); begin ... end Do_
类型矩阵类型是项类型的数组(自然范围,自然范围);
为了对输入矩阵应用一些变换,我需要在函数中定义一个矩阵切片
我试着用下面的方法来做
procedure Do_Stuff(M: Matrix_Type) is
-- c needs to be half as big as the input matrix M
C: Matrix_Type(A'Length / 2, A'Length / 2);
begin
...
end Do_Stuff;
但是,编译失败,出现错误:无效的索引约束
,我不太理解,因为放置A'Length
会像A'Length/2
一样返回一个数字。如果我用这样的固定数字声明C
C: Matrix_Type(2,2);
一切正常
在这种情况下,错误是什么?我能理解的唯一可能的情况是,如果我将一些未初始化的矩阵传递给函数,即使这对我来说也没有什么意义。对于矩阵C
来说,应该是:
对于非平方矩阵,可以使用指定特定索引:
C : Matrix_Type(M'First(1) .. M'Length(1) / 2, M'First(2) .. M'Length(2) / 2);
矩阵C
的
对于非平方矩阵,可以使用指定特定索引:
C : Matrix_Type(M'First(1) .. M'Length(1) / 2, M'First(2) .. M'Length(2) / 2);
你说
C:Matrix(2,2)代码>工作正常,但这里没有!完全相同的错误。你说C:Matrix(2,2)代码>工作正常,但这里没有!完全相同的错误。这里需要注意M的下界!如果不是0呢?或者1?还需要注意奇数M'长度
。使用C:Matrix\u类型(M'范围(1)/2和M'范围(2)/2)
?在这种情况下,可以预见起始索引没有问题。也许,使用适当的。需要注意M的下界!如果不是0呢?或者1?还需要注意奇数M'长度
。使用C:Matrix\u类型(M'范围(1)/2和M'范围(2)/2)
?在这种情况下,可以预见起始索引没有问题。也许,使用适当的。