Ich schreibe eine verknüpfte Liste. Hier ist mein Code:Dummy-Knoten in generische verkettete Liste
Linked_List.ads
generic
type T is private;
package Linked_List is
type Node;
type NodeAccess is access Node;
type Node is record
Data : T;
Next : NodeAccess := null;
end record;
type List is record
Head : NodeAccess;
Has_Dummy_Head : Boolean;
Size : Integer;
end record;
type ListAccess is access List;
function Get_New_List(Has_Dummy_Head : Boolean) return ListAccess;
private
function Get_New_Node(Data : T; Next : NodeAccess) return NodeAccess;
end Linked_List;
Linked_List.adb
package body Linked_List is
function Get_New_Node(Data : T; Next : NodeAccess) return NodeAccess is
New_Node : NodeAccess := new Node;
begin
New_Node.all := (Data => Data, Next => Next);
return New_Node;
end Get_New_Node;
function Get_New_List(Has_Dummy_Head : Boolean) return ListAccess is
New_List : ListAccess := new List;
begin
if Has_Dummy_Head = True then
New_List.all := (Head => Get_New_Node(Data => null, Next => null), Has_Dummy_Head => True, Size => 0);
else
New_List.all := (Head => null, Has_Dummy_Head => False, Size => 0);
end if;
return New_List;
end Get_New_List;
end Linked_List;
Ich weiß nicht, wie der Kopf hinzufügen, wenn die Liste mit Dummy-Kopf (Has_Dummy_Head ist wahr). Ich habe versucht, nur das Datenfeld im Knoten auf Null zu setzen, aber ich arbeite nicht. Ich weiß nicht, wie man einen Wert vom Typ T erhalten
Ich kann es nicht funktionieren lassen. Wenn ich ersetze Get_New_Node (Daten => Null, Next => null) mit Get_New_Node (Daten =><>, Weiter => null) Ich "fehlender Operand" Fehler. Wenn ich addiere() Get_New_Node (Daten => (<>), Next => null) Ich bekomme "(Ada 2005) Box nur mit benannter Notation erlaubt" Fehler Btw Ich mache das für Bildungszwecke. –
Die Boxnotation ("<>") kann nur in Aggregaten verwendet werden (wie beim Aufruf von 'new Node'). Sie können dies nicht als Unterprogrammaufruf übergeben. Wie ich bereits erwähnt habe, könnten Sie eine Konstante (initialisiert mit einem Aggregat) definieren und sie an Get_New_Node übergeben, wenn Sie wirklich brauchen. Aber wenn Sie das brauchen, könnte das ein Design sein, das vielleicht besser anders geht. – manuBriot