Ada错误:在表达式或调用中无效使用子类型标记
我的Ada程序有一个错误,我被困在这里了。这里有很多代码,我不想把它们全部复制到这里,所以我希望我正在分享的部分就是问题产生的部分Ada错误:在表达式或调用中无效使用子类型标记,ada,subtype,Ada,Subtype,我的Ada程序有一个错误,我被困在这里了。这里有很多代码,我不想把它们全部复制到这里,所以我希望我正在分享的部分就是问题产生的部分 task type Producent is entry Start(Jedzenie: in Typ_Jedzenia; Czas_Produkcji: in Integer); end Producent; task type Buffer is entry Zamow(Jedzenie: in Typ_Jedze
task type Producent is
entry Start(Jedzenie: in Typ_Jedzenia; Czas_Produkcji: in Integer);
end Producent;
task type Buffer is
entry Zamow(Jedzenie: in Typ_Jedzenia; Numer: in Integer; Czy_Zatwierdzono: out Boolean);
entry Dostarcz(Zamowienie: in Typ_Zestawu; Numer: out Integer);
end Buffer;
task body Producent is
package Losowa_Produkcja is new
Ada.Numerics.Discrete_Random(Zakres_Czasu_Produkcji);
Generator: Losowa_Produkcja.Generator;
Index_Jedzenia: Integer;
Nr_Produkcji_Jedzenia: Integer := 1;
Produkcja: Integer;
Zatwierdzono: Boolean := False;
begin
accept Start (Jedzenie : in Typ_Jedzenia; Czas_Produkcji : in Integer) do
Losowa_Produkcja.Reset(Generator);
Index_Jedzenia := Jedzenie;
Produkcja := Czas_Produkcji;
end Start;
loop
delay Duration(Losowa_Produkcja.Random(Generator));
Put_Line("Przygotowano " & Nazwa_Jedzenia(Index_Jedzenia) & " numer " & Integer'Image(Nr_Produkcji_Jedzenia));
loop
Buffer.Zamow(Index_Jedzenia, Nr_Produkcji_Jedzenia, Zatwierdzono); <-------- ERROR
if Zatwierdzono = False then
Put_Line("Brak miejsca w kuchni dla " & Nazwa_Jedzenia(Index_Jedzenia) & ". Wstrzymanie");
delay Duration(3.0);
else
Nr_Produkcji_Jedzenia := Nr_Produkcji_Jedzenia + 1;
end if;
exit;
end loop;
end loop;
end Producent;
task body Buffer is
begin
Put_Line("Jestesmy u Buffera");
loop
select
accept Zamow(Jedzenie: in Typ_Jedzenia; Numer: in Integer; Czy_Zatwierdzono: out Boolean) do
Put_Line("Trwa zamawianie...");
end Zamow;
end select;
end loop;
end Buffer;
从我的尝试中我了解到,当我想调用entry Buffer.ZamowIndex_Jedzenia、Nr_Produkcji_Jedzenia、Zatwierdzono;任务生产中的“Zatwierdzono”参数存在错误。当我从声明和定义中删除此参数时,Zamow条目起作用了
完全错误:在表达式或调用中无效使用子类型标记
我应该更改什么,或者这个布尔Zatwierdzono变量的问题在哪里?
Zatwierdzono在本案中表示接受。
谢谢你的建议。你有两个问题:
Index_Jedzenia := Jedzenie;
在您的开始中,条目试图隐式地将Jedzenie从其类型Typ_Jedzenia转换为Integer,即Index_Jedzenia的类型。你需要一些方法来转换这个
此外,在您看到错误所在的行中,该条目的第一个参数类型为Typ_Jedzenia,但您正在传递一个整数索引。同样,您不能隐式地转换这样的类型
如果Typ_Jedzenia实际上是一个整数,那么可以显式地转换它们。否则,您需要创建某种类型的转换函数,并在传入或分配给不同类型之前使用该函数。您有两个问题:
Index_Jedzenia := Jedzenie;
在您的开始中,条目试图隐式地将Jedzenie从其类型Typ_Jedzenia转换为Integer,即Index_Jedzenia的类型。你需要一些方法来转换这个
此外,在您看到错误所在的行中,该条目的第一个参数类型为Typ_Jedzenia,但您正在传递一个整数索引。同样,您不能隐式地转换这样的类型
如果Typ_Jedzenia实际上是一个整数,那么可以显式地转换它们。否则,您需要创建某种类型的转换函数,并在传入或分配给不同类型之前使用该函数。可能相关:该条目调用的第一个参数上似乎存在类型不匹配。但是,由于mwe没有完整的代码,也没有包含行:字符和可能的其他信息的fuss错误消息,所以更多的是猜测。试着做一个最小的测试用例…在调用Buffer.Zamow的点上,给出错误,唯一可见的命名Buffer是一个类型:task type Buffer。不能调用类型。您需要一个类型为O:Buffer的对象的任务;然后您可以调用该任务的条目:O.Zamow。或者您不需要任务类型?会有多少实例?任务缓冲区是…谢谢@JeffreyR.Carter,就这样。我之前没有看到我试图调用任务类型的条目,而不是这种类型的对象。混名。。。再次非常感谢!可能相关:该条目调用的第一个参数上似乎存在类型不匹配。但是,由于mwe没有完整的代码,也没有包含行:字符和可能的其他信息的fuss错误消息,所以更多的是猜测。试着做一个最小的测试用例…在调用Buffer.Zamow的点上,给出错误,唯一可见的命名Buffer是一个类型:task type Buffer。不能调用类型。您需要一个类型为O:Buffer的对象的任务;然后您可以调用该任务的条目:O.Zamow。或者您不需要任务类型?会有多少实例?任务缓冲区是…谢谢@JeffreyR.Carter,就这样。我之前没有看到我试图调用任务类型的条目,而不是这种类型的对象。混名。。。再次非常感谢!谢谢:我将任务类型名称与任务类型对象名称混合在一起,这是主要问题,转换是另一回事,但我已经以某种方式处理了它。谢谢谢谢:我将任务类型名称与任务类型对象名称混合在一起,这是主要问题,转换是另一回事,但我已经以某种方式处理了它。谢谢