gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 23:25:48 25 4
gpt4 key购买 nike

我正在尝试创建一个数组来存储 3 个动态分配的 float 数组。当我稍后尝试在我的程序中分配这三个数组时,编译器告诉我它期待“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));

关于arrays - Ada 动态分配数组中的数组在编译时无法初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67273701/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com