【发布时间】:2015-08-04 14:59:06
【问题描述】:
在 Ada 2012 中,我希望在声明的数组内有一个链表,而不是分配。我想通过一个过程设置链接指针。
我已将我的程序简化为以下说明我想使用的原理,但我无法在 Raspi 上运行的 Gnat 4.9.2 (Debian Jessie) 中编译它...
procedure Arr is
type Cell;
type Cell_Ptr is access all Cell;
type Cell is
record
Number : Integer := 0;
Next : Cell_Ptr := null;
end record;
type Chain is array (1 .. 100) of aliased Cell;
procedure Make_Links (Ch : in out Chain);
procedure Make_Links (Ch : in out Chain) is
begin
for I in Ch'First .. Ch'Last - 1 loop
Ch (I).Next := Ch (I + 1)'Access; -- ERROR HERE
end loop;
end Make_Links;
My_Chain : Chain;
begin
Make_Links (My_Chain);
end Arr;
我得到这个编译器错误: “non-local pointer cannot point to local object”在上面指出的那一行。
我知道我正在尝试做一些有点奇怪的事情,但我计划根据我将这个单元格数组传递给哪个过程以不同的方式(向后或随机等)执行链接的其他一些函数。
如何修复此代码以使其编译?无法完全理解这一点(我还是个新手,但很享受学习过程)。
【问题讨论】:
-
我不确定这是否可行,但请尝试将参数更改为
Ch : access Chain并将调用更改为Make_Links (My_Chain'access)。 -
...当然,您必须将
My_Chain声明为aliased。
标签: list pointers compilation ada