0
リンクリストを作成しています。ここに私のコードは次のとおりです。一般リンクリストのダミーノード
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;
私はリストがダミーヘッドであるときにヘッドを追加する方法がわからない(Has_Dummy_Headが真であります)。 NodeのDataフィールドをnullに設定してみましたが、動作しません。私はあなたが
Head => new Node'(Data => <>, Next => null)
代わりの
Head => Get_New_Node(Data => null, Next => null)
(というかNull_Node
定数またはそのようないくつかの定義された)を使用して試みることができるタイプのT.
私はそれを動作させることはできません。 Get_New_Node(データ=> null、次=> null) とGet_New_Node(データ=><>、次=> null)を置き換えた場合 「オペランドが見つかりません」というエラーが発生しました。 Get_New_Node(データ=>(<>)、次=>ヌル) "(Ada 2005)ボックスには名前付き表記のみが許可されています"エラーが発生しました Btw私は教育目的でこの作業を行っています。 –
ボックス記法( "<>")は集約でのみ使用できます( 'new Node'の呼び出しと同じです)。これをサブプログラム呼び出しとして渡すことはできません。私が言及したように、あなたが本当に必要な場合は、定数を定義して(集約で初期化して)Get_New_Nodeに渡すことができます。しかし、もう一度、もしあなたがこれを必要とするならば、それは異なったやり方で良いかもしれないデザインを示すかもしれません。 – manuBriot