Я очень новичок в языке программирования ADA, и это первая проблема, с которой я сталкиваюсь с этим языком.Ошибка перегрузки оператора Ada "="
Я пытаюсь перегрузить оператор =
, но компилятор дает мне эту ошибку: «нет применимого оператора» = «для очереди частного типа».
Хм, но я думаю, что я написал это хорошо.
Посмотрите на .ads:
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;
, а затем к .adb:
function "="(mleft: in Queue; mright : in Queue) return Boolean is
l:Boolean:=false;
l2:Boolean:=false;
val2:Value;
begin
if(mleft.Size/=mright.Size) then return false;
else
for i in 1..mleft.Size loop
Get(mleft,mleft.Adatok(i).K,val2,l2);
if l2=false or mleft.Adatok(i).V/=val2 then l:=true;
end if;
exit when l=true;
end loop;
return l=false;
end if;
end "=";
И основной() для вызова "=":
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;
'Использование Тип Newq;' после инстанцирования пакета Newq должен сделать его примитивные операции видимыми. В противном случае способ доступа к функции был бы «if Newq.» = «(S1, s2) then ...' –
@BrianDrummond, но где писать 'use type Newq'? Это дает мне больше ошибок ... «требуется маска подтипа» – Iero
Это весь «главный» файл? Если это так, вам не хватает «с очередью»; до "procedure demmo is" – egilhh