Compiler errors 这个Ada程序有什么错误?

Compiler errors 这个Ada程序有什么错误?,compiler-errors,ada,Compiler Errors,Ada,Ada2012程序中的错误是什么 with Ada.Iterator_Interfaces; package My is type Cursor is private; function Has_Element (Position: Cursor) return Boolean; package Base_Iterators is new Ada.Iterator_Interfaces(Cursor, Has_Element); type Bindings_It

Ada2012程序中的错误是什么

with Ada.Iterator_Interfaces;

package My is

   type Cursor is private;

   function Has_Element (Position: Cursor) return Boolean;

   package Base_Iterators is new Ada.Iterator_Interfaces(Cursor, Has_Element);

   type Bindings_Iterator is new Base_Iterators.Forward_Iterator with private;

   overriding function First (Object: Bindings_Iterator) return Cursor;

   overriding function Next (Object: Bindings_Iterator; Position: Cursor) return Cursor;

private

   type Iterated_Object is access all Integer;

   type Cursor is new Iterated_Object;

   type Bindings_Iterator is new Base_Iterators.Forward_Iterator with null record;

end My;
尝试检查语法和语义:

$ gnatgcc -gnat2012 -c my.ads 
my.ads:23:09: type must be declared abstract or "First" overridden
my.ads:23:09: "First" has been inherited from subprogram at a-iteint.ads:26, instance at line 9

据我所知,
首先
被我覆盖。我不明白编译器抱怨什么。

错误源于
游标
是一种私有派生的访问类型。改成

type Cursor is access all Integer;
删除错误,并将其更改为记录类型或数字类型。 将
迭代对象
光标
的完整定义移动到公共视图也会删除错误


我认为您偶然发现了一个编译器错误。

该错误源于
游标
是一个私有派生的访问类型。改成

type Cursor is access all Integer;
删除错误,并将其更改为记录类型或数字类型。 将
迭代对象
光标
的完整定义移动到公共视图也会删除错误


我想你是偶然发现了一个编译器错误。

出于好奇;您打算如何释放游标对象分配的内存?@egilhh这是真实代码的缩短版本。在实际代码中没有整数指针。有一个指向某个对象的指针。它仍然是一个访问类型,您需要释放内存…@egilhh注意,它是
access all
,而
all
这是因为我访问的对象可能保存在局部变量中,而不是内存池中。因此不需要取消分配它,因为当局部变量超出范围(这是我的代码最有可能的用例)时,它就会消失。这种设计将不适用于广义for循环。API中没有任何地方可供用户添加对局部变量的访问。此外,出于好奇,为每个游标对象增加额外的堆栈变量似乎很麻烦;您打算如何释放游标对象分配的内存?@egilhh这是真实代码的缩短版本。在实际代码中没有整数指针。有一个指向某个对象的指针。它仍然是一个访问类型,您需要释放内存…@egilhh注意,它是
access all
,而
all
这是因为我访问的对象可能保存在局部变量中,而不是内存池中。因此不需要取消分配它,因为当局部变量超出范围(这是我的代码最有可能的用例)时,它就会消失。这种设计将不适用于广义for循环。API中没有任何地方可供用户添加对局部变量的访问。此外,为每个游标对象增加一个额外的堆栈变量似乎很麻烦,多亏了您的建议,如何更改我的代码。这是一个有用的建议。但是您还没有解释我的代码不起作用的确切版本。请你也帮帮忙。我不明白我会报告错误的谢谢你给我的建议如何更改我的代码。这是一个有用的建议。但是您还没有解释我的代码不起作用的确切版本。请你也帮帮忙。我不明白我会报告这个错误