Debugging Ada“=”运算符重载错误
我是ADA编程语言的新手,这是我使用这种语言遇到的第一个问题 我试图重载operator=但编译器给了我这个错误:没有适用于私有类型队列的operator= 嗯,但我想我写得很好 请看。广告:Debugging Ada“=”运算符重载错误,debugging,operator-overloading,syntax-error,ada,Debugging,Operator Overloading,Syntax Error,Ada,我是ADA编程语言的新手,这是我使用这种语言遇到的第一个问题 我试图重载operator=但编译器给了我这个错误:没有适用于私有类型队列的operator= 嗯,但我想我写得很好 请看。广告: generic type Value is private; type Key is private; with function "+"(x,y:Value) return Value is <>; package Queue is type Rek is record V
generic
type Value is private;
type Key is private;
with function "+"(x,y:Value) return Value is <>;
package Queue is
type Rek is record
V:Value;
K:Key;
end record;
subtype Elem is Rek;
type Queue( Max: Positive ) is limited private;
procedure Add( b: in out Queue; k: in Key; v:in Value );
procedure Get( b: in Queue; k: in Key; v: out Value; found: out Boolean );
procedure Erase(m: in out Queue; k : in Key);
function "="(mleft: in Queue; mright : in Queue) return Boolean;
function Has_Key( m: Queue ; k:Key) return Boolean;
private
type Tömb is array ( Integer range <> ) of Elem;
type Queue( Max: Positive ) is record
Adatok: Tömb(1..Max);
Putter, Getter: Positive := 1;
Size: Natural := 0;
end record;
end Queue;
而主叫=:
procedure demmo is
mer: constant Integer :=10;
package Newq is new Queue(Integer,Integer);
s1:Newq.Queue(5);
s2:Newq.Queue(5);
begin
Newq.Add(s1,1,5);
Newq.Add(s2,1,5);
if s1=s2 then PUT_LINE("Egyenloek");
else PUT_LINE("Nem egyenloek");
end if;
end demmo;
如果希望直接看到类型的concrete=运算符,则必须使其可见。为此,您需要使用或使用类型或使用所有类型
参考资料
使用Newq类型;在实例化包之后,Newq应该使其原语操作可见。否则,访问函数的方法是:如果Newq.=s1,s2,那么…@BrianDrummond,但是在哪里写入使用类型Newq?它给了我更多的错误…子类型掩码是必需的整个主文件?如果是这样,您将丢失一个带有队列的队列;在demmo程序之前is@egilhh不,这不是全部……我用queue写的。它应该是使用newq.queue类型;就在包newq之后是。。。;
procedure demmo is
mer: constant Integer :=10;
package Newq is new Queue(Integer,Integer);
s1:Newq.Queue(5);
s2:Newq.Queue(5);
begin
Newq.Add(s1,1,5);
Newq.Add(s2,1,5);
if s1=s2 then PUT_LINE("Egyenloek");
else PUT_LINE("Nem egyenloek");
end if;
end demmo;
package Newq is new Queue(Integer,Integer);
use type newq.Queue;