编译时无法初始化数组中的ada动态分配的数组
我正在尝试创建一个存储 3 个动态分配的浮点数组的数组。当我稍后在我的程序中尝试分配这三个数组时,编译器告诉我它期待“Float_Array”,但“找到了对“Float_Array”子类型的类型访问”。我不确定这个问题是来自我在这里使用指针还是因为我正在创建一个包含动态数组的数组。
这是我的数组定义:
type Float_Array is array (Integer range <>) of Float;
type Triangle_Array is array (0..2) of Float_Array;
type Triangle_Array_Ptr is access Triangle_Array;
这是导致问题的代码:
V(0) := new Float_Array(0..Size-1);
V(1) := new Float_Array(0..Size-1);
V(2) := new Float_Array(0..Size-1);
编辑:V 是 Triangle_Array_Ptr 感谢 Zerte 对我代码第 2 行的澄清,我没有意识到这是数组的规则。有没有不同的方式来包含三个动态 Float_Arrays?如果没有,我可以创建三个独立的 Float_Arrays 并将它们传递给每个方法。
回答
你不能创建一个无限大小的对象数组,你是对的,使用动态内存的方法是正确的。但是,需要动态分配的是无限大小的对象;您需要一个Float_Array_Ptr固定大小的 ,因此您可以根据需要创建数组。
type Float_Array is array (Positive range <>) of Float;
type Float_Array_Ptr is access Float_Array;
type Triangle_Array is array (1 .. 3) of Float_Array_Ptr;
V : Triangle_Array
:= (1 => new Float_Array'(1 .. 3 => 1.0),
2 => new Float_Array'(1 .. 2 => 2.0),
3 => new Float_Array'(1 .. 1 => 3.0));
正如您所见,它可以让您创建一个由Float.
另一方面,如果Float_Array任何特定情况下的所有s 的长度都相同,也许您可以使用二维数组而根本不分配内存?
type Triangle_Array
is array (Positive range <>, Positive range <>) of Float;
V : Triangle_Array (1 .. 3, 1 .. 5)
:= (1 => (others => 1.0),
2 => (others => 2.0),
3 => (others => 3.0));