2016-04-27 13 views
1

arbeitet Ich habe ein Paket namens LINKED_LIST (.ads) Hier ist der Code in es ist:kann nicht verstehen, wie Generika

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

und hier ist der Code in dem Paket, das die Hauptfunktion (Haupt enthält. 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; 

ich erhalte diese Fehlermeldung:

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 

Jede Hilfe sehr geschätzt wird.

Antwort

5

new Linked_List(T => Integer) definiert ein neues Paket , keine neuer Typ. Die Fehlermeldungen, die Sie erhalten, sind, weil der Compiler denkt, dass Sie einen Typ deklarieren. Wenn Sie also den Namen eines Pakets in Spalte 30 sehen, haben Sie ihn verwirrt. es wollte den Namen eines (Unter) -Typs sehen.

Linie 4 sollte

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

nach dem Lesen gibt es eine Art ListOfIntegers.List, so dass Sie

My_List : ListOfIntegers.List; 

schreiben Sie haben finden können ListOfIntegers. die ganze Zeit zu sagen ärgerlich; können Sie

sagen
use ListOfIntegers; 

nach dem Sie gerade

My_List : List; 

schreiben, aber es ist in der Regel dachte am besten, dies nicht zu übertreiben (wenn Sie Dutzende von „withed“ Pakete „mit“ ihnen das alles macht schwer zu wissen, auf was du dich beziehst).

Übrigens ist normale Ada-Verwendung, Unterstriche zu verwenden, um Wörter in Bezeichnern zu trennen: List_Of_Names.