gpt4 book ai didi

ada - Ada 中的变体记录数组

转载 作者:行者123 更新时间:2023-12-01 13:35:56 27 4
gpt4 key购买 nike

我想声明一个元素类型为变体记录的数组。像这样:

type myStruct (theType : vehicleType) is
record
...
when car => numOfWheels : Positive;
when others => null;
end record;

myArray : array (Positive range <>) of myStruct;

但在这种情况下我得到了错误。它只允许这样:

myArray : array (1.100) of myStruct(Car); //such as

那么如何解决索引问题以及如何在不给出判别式的情况下描述变体记录类型的数组?

最佳答案

上面的例子不会编译。这是一个正确的版本(为简单起见,我将 mystruct 更改为 Integer):

procedure test_array is
subtype Vehicle_Array_Index is Integer range 1..100; --// Maximum size is 100
type Arr_T is array (Vehicle_Array_Index range <>) of Integer;
type Vehicle_Array (Size: Vehicle_Array_Index := 1) is record
Vehicles : Arr_T(1..Size);
end record;
begin
null;
end;

错误之一是你不能在记录中包含匿名数组,其次,你应该使用判别式来约束数组。

如上所述,这对于变长数组来说不是一个好的解决方案,因为无论如何您很可能会得到最大大小的数组。如果您想要具有动态确定大小的数组,您可以为此使用 block 。

declare
a: array(1..n) of integer; -- n can be a variable here
begin
--some code using a
end;

它也适用于过程和函数的声明部分,其中 n 可以是传递给子程序的参数(Ada 相对于 C/C++ 的优势之一)。当然,您可以使用分配器在堆上动态分配数组。

关于ada - Ada 中的变体记录数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4099078/

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