在 ADA 中实例化任务

Ima*_*man 0 ada parameterized task

我需要在 Ada 中创建一个参数化任务,我得到的错误是:判别式必须具有离散或访问类型。

这是我的代码:

task type FEP_Con(Port_Num :  Port_Name) is
  entry Start;
end FEP_Con;

type FEP_Con_acc is access FEP_Con;

task body FEP_Con is
  S_Port : Serial_Port;
  Buffer : Ada.Streams.Stream_Element_Array(1..1024);
  Last   : Ada.Streams.Stream_Element_Offset;
  Response_Str : Unbounded_String;
  --cPort : Port_Name := "";
begin
  accept Start;
Run Code Online (Sandbox Code Playgroud)

提前致谢。

Mar*_*c C 5

虽然没有提供“Port_Name”的类型定义,但根据判别名称,我认为它是一个固定长度的字符串或 Unbounded_String 或类似的。两者都不是离散类型或访问类型。

离散类型是“整数类型或由其值的枚举(枚举类型)定义”。RM 3.2[3]

接入类型是一个“指针”类型。

因此,对于您的任务判别器,您可以使用一些基于整数的类型——这并不一定意味着从 Integer 派生或子类型化,而只是一个计数整数类型,例如 type Port_Name_IDs is range 1 .. 100;

或者您可以将 Port_Names 定义为枚举,例如:

type Port_Name is (Haifa, Amsterdam, Long_Beach);
Run Code Online (Sandbox Code Playgroud)

或者定义一个引用您现有 Port_Name 类型的访问类型,例如:

type Port_Name_Ref is access Port_Name;
Run Code Online (Sandbox Code Playgroud)