Ada Can';我不明白泛型是如何工作的

Ada Can';我不明白泛型是如何工作的,ada,gnat,Ada,Gnat,我有一个名为Linked_List(.ads)的包,其中的代码如下: Generic type T is private; package Linked_List is type List is tagged record Data : T; end record; end Linked_List; 下面是包含主函数(main.adb)的包中的代码 我得到了这个错误: 4:30 subtype mark required in this context fou

我有一个名为Linked_List(.ads)的包,其中的代码如下:

Generic
   type T is private;
package Linked_List is
   type List is tagged record
       Data : T;
   end record;
end Linked_List;
下面是包含主函数(main.adb)的包中的代码

我得到了这个错误:

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
非常感谢您的帮助。

新链表(T=>Integer)
定义了一个新的包,而不是新的类型。您收到的错误消息是因为编译器认为您在声明一个类型,所以在第30列看到包的名称时会混淆它;它希望看到(子)类型的名称

第4行应改为

package ListOfIntegers is new Linked_List(T => Integer);
之后是一个类型
ListOfIntegers.List
,这样您就可以编写

My_List : ListOfIntegers.List;
你可能会发现必须一直说
积分列表。
很烦人;你可以说

use ListOfIntegers;
然后你就可以写了

My_List : List;
但通常认为最好不要做得过火(如果你有几十个“带”的软件包,那么使用“它们都会让你很难知道你指的是哪一个)

顺便说一下,Ada的正常用法是使用下划线分隔标识符中的单词:
名称列表
新链接列表(T=>Integer)
定义了一个新的包,而不是一个新的类型。您收到的错误消息是因为编译器认为您在声明一个类型,所以在第30列看到包的名称时会混淆它;它希望看到(子)类型的名称

第4行应改为

package ListOfIntegers is new Linked_List(T => Integer);
之后是一个类型
ListOfIntegers.List
,这样您就可以编写

My_List : ListOfIntegers.List;
你可能会发现必须一直说
积分列表。
很烦人;你可以说

use ListOfIntegers;
然后你就可以写了

My_List : List;
但通常认为最好不要做得过火(如果你有几十个“带”的软件包,那么使用“它们都会让你很难知道你指的是哪一个)

顺便说一句,Ada的正常用法是使用下划线来分隔标识符中的单词:
名称列表