在ADA中实例化任务

时间:2014-05-08 06:58:22

标签: task ada parameterized

我需要在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;

提前致谢。

1 个答案:

答案 0 :(得分:4)

虽然未提供“Port_Name”的类型定义,但基于判别式名称,我认为它是固定长度的字符串或Unbounded_String或某些。这些都不是离散的或访问类型。

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

access type是“指针”类型。

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

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

type Port_Name is (Haifa, Amsterdam, Long_Beach);

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

type Port_Name_Ref is access Port_Name;