Ada 动态分配数组中的数组在编译时无法初始化

Ada dynamically allocated array in an array cannot be initialized at compile time

我正在尝试创建一个数组来存储 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 的长度都相同,也许您可​​以使用二维数组而不分配内存?

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));