我需要在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;
提前致谢。
答案 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;