这个 Ada 程序有什么错误?
What is the error in this Ada program?
这个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
据我了解First
被我覆盖了。我不明白编译器抱怨什么。
错误来自 Cursor
是私有派生的访问类型。将其更改为
type Cursor is access all Integer;
删除错误,将其更改为记录类型或数字类型也是如此。
将 Iterated_Object
和 Cursor
的完整定义移动到 public 视图也会消除错误。
我认为您偶然发现了编译器错误。
这个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
据我了解First
被我覆盖了。我不明白编译器抱怨什么。
错误来自 Cursor
是私有派生的访问类型。将其更改为
type Cursor is access all Integer;
删除错误,将其更改为记录类型或数字类型也是如此。
将 Iterated_Object
和 Cursor
的完整定义移动到 public 视图也会消除错误。
我认为您偶然发现了编译器错误。