Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ada错误:在表达式或调用中无效使用子类型标记_Ada_Subtype - Fatal编程技术网

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

我的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_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,就这样。我之前没有看到我试图调用任务类型的条目,而不是这种类型的对象。混名。。。再次非常感谢!谢谢:我将任务类型名称与任务类型对象名称混合在一起,这是主要问题,转换是另一回事,但我已经以某种方式处理了它。谢谢谢谢:我将任务类型名称与任务类型对象名称混合在一起,这是主要问题,转换是另一回事,但我已经以某种方式处理了它。谢谢