我有一个名为Linked_List(.ads)的包,下面是代码:
Generic
type T is private;
package Linked_List is
type List is tagged record
Data : T;
end record;
end Linked_List;
Run Code Online (Sandbox Code Playgroud)
这里是包中包含main函数(main.adb)的代码
with Ada.Text_IO; use Ada.Text_IO;
with Linked_List;
procedure Main is
type ListOfIntegers is new Linked_List(T => Integer);
begin
null;
end Main;
Run Code Online (Sandbox Code Playgroud)
我收到这个错误:
4:30 subtype mark required in this context
found "Linked_List" declared at linked_list.ads:3
found "Linked_List" declared at linked_list.ads:3
4:41 incorrect constrain for this kind of type
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏.
new Linked_List(T => Integer)定义一个新包,而不是一个新类型.您获得的错误消息是因为编译器认为您正在声明类型,因此在第30列看到包的名称会使其混淆; 它想看到(子)类型的名称.
第4行应该阅读
package ListOfIntegers is new Linked_List(T => Integer);
Run Code Online (Sandbox Code Playgroud)
之后有一个类型ListOfIntegers.List,所以你可以写
My_List : ListOfIntegers.List;
Run Code Online (Sandbox Code Playgroud)
你可能会发现不得不一直说ListOfIntegers.烦人; 你可以说
use ListOfIntegers;
Run Code Online (Sandbox Code Playgroud)
之后你就可以写了
My_List : List;
Run Code Online (Sandbox Code Playgroud)
但通常认为最好不要过度使用(如果你有几十个"软件"包,"使用"它们都会让你很难知道你指的是哪一个).
顺便说一句,正常的Ada用法是使用下划线来分隔标识符中的单词:List_Of_Names.