2016-04-27 57 views
1

我有一个名为Linked_List(.ads)封装下面是它的代码:无法理解泛型是如何工作的

Generic 
    type T is private; 
package Linked_List is 
    type List is tagged record 
     Data : T; 
    end record; 
end Linked_List; 

,这里是其中包含的主要功能(主要包装上的代码。 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; 

我得到这个错误:

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 

任何帮助表示赞赏。

回答

5

new Linked_List(T => Integer)定义了一个新的,而不是一个新的类型。你得到的错误信息是因为编译器认为你声明了一个类型,所以看到列30上的一个包的名字会让它感到困惑;它想看到(子)类型的名称。

4号线改为

package ListOfIntegers is new Linked_List(T => Integer); 

之后其中有一个类型ListOfIntegers.List,所以你可以写

My_List : ListOfIntegers.List; 

您可能会发现不必说ListOfIntegers.所有的时间没有干扰;你可以说

use ListOfIntegers; 

之后,你可以只写

My_List : List; 

,但它通常被认为最好不要过分使用(如果你有几十个“withed”套餐“使用”所有这些使得很难知道你指的是哪一个)。

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