ジェネリック リンク リスト クラスの等価演算子をオーバーロードしようとしています。関連するコードは次のとおりです。
list.ads:
generic
type Element_Value_Type is private;
package List is
type List_Type is private;
type Element is private;
type Element_Ptr is private;
function "=" (L, R : List_Type) return Boolean;
-- Other linked list function declarations --
private
type Element is
record
Value : Element_Value_Type;
Next : Element_Ptr;
Prev : Element_Ptr;
end record;
type Element_Ptr is access Element;
type List_Type is
record
Length : Integer := 0;
Head : Element_Ptr := null;
Tail : Element_Ptr := null;
end record;
end List;
リスト.adb:
package body List is
function "=" (Left, Right : List_Type) return Boolean is
begin
-- Code for equality checking --
end "=";
-- Other function implementations --
end List;
main.adb:
with Text_IO;
with List;
use Ada;
procedure Main is
package Int_Lists is new List (Integer);
procedure Print_List (List : Int_Lists.List_Type) is
begin
-- code to print the contents of a list --
end
L1, L2 : Int_Lists.List_Type;
begin
Int_Lists.Append (L1, 1);
Int_Lists.Append (L2, 1);
Int_Lists.Append (L1, 2);
Int_Lists.Append (L2, 2);
Text_IO.Put_Line (Item => Boolean'Image (L1 = L2));
end Main;
そして、これは Main の本文の最後の行に表示されるエラーです。
operator for private type "List_Type" defined at list.ads:X, instance at line X is not directly visible
「=」関数を表示させる方法はありますか? を実行するか、Main の本体の前Int_Lists."=" (L1, L2)
に配置すると機能しますが、最初の 1 つは演算子のオーバーロードの目的を無効にし、2 番目の 1 つは Main 内からすべての List 関数への非修飾アクセスを許可します。use Int_Lists