我在Ada95中工作,并且在找出指针方面遇到困难。
我有如下代码:
type vector is array (1 .. 3) of integer;
type vector_access is access vector;
my_vec : vector;
procedure test is
pointer : vector_access := my_vec'access;
begin
...
end;
这无法编译指针的定义,说
“'ACCESS的前缀必须是对象的别名视图,或表示具有非内部调用约定的子程序”
如果然后将向量本身的定义更改为:
my_vec : aliased vector
现在返回编译器错误:
“ X'ACCESS的预期类型,其中X表示对象的别名视图,必须是常规的acces类型”
归根结底,我真正需要的是一个指向数组中特定项目的指针,该位置根据输入参数是动态的。谁能指出我正确的方向?
最佳答案
如果您使用的是GNAT,则“必须是常规访问类型”之后的错误消息应该为您提供了解决方案:
添加“全部”以键入“ vector_access”
在第...行定义
这样您最终会得到:
type Vector_Access is access all Vector;
使用“ all”来指定常规访问类型与Ada中的动态内存分配池有关。如果您不关心动态内存分配池,则不必担心,只需在访问类型定义中包括“全部”即可。
我不确定这是否是一天结束后要查找的内容的一部分,但是您知道,在大多数情况下,Ada的访问(指针)类型用于处理动态分配的内存,对吗?
因此,您不必动态地将my_vec指向别名变量,而是可以动态分配它:
Pointer_2_Dynamic : vector_access := new Vector;
这样,您可以在运行时动态分配所需的对象,并轻松处理大小可变的对象(尽管您需要使用不同的向量定义来完成此操作:
type Dynamic_Vector is array (Natural range <>) of Integer;
type Dynamic_Vector_Access is access Dynamic_Vector;
N : Natural := 10; -- Variable here, but could be a subprogram parameter.
Dyn_Vector : Dynamic_Vector_Access := new Dynamic_Vector(1..N);
关于pointers - Ada数组访问:指向数组中特定项目的指针,该位置基于输入参数是动态的。,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3780962/