Matrix 无效索引约束

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_

我在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_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)
?在这种情况下,可以预见起始索引没有问题。也许,使用适当的。