这个错误通常是因为使用受控类型后,没有实现所有的抽象过程所导致的。要解决此问题,需要确保实现所有的抽象过程,并将它们标记为分派过程。
示例代码:
package My_Package is
type Abstract_Type is abstract tagged null record;
procedure Procedure_1 (Param : in out Abstract_Type);
procedure Procedure_2 (Param : in out Abstract_Type) is abstract;
end My_Package;
package body My_Package is
procedure Procedure_1 (Param : in out Abstract_Type) is begin
null;
end Procedure_1;
end My_Package;
with My_Package;
procedure My_Program is
type Implementation_Type is new My_Package.Abstract_Type with null record;
overriding procedure Procedure_2 (Param : in out Implementation_Type) is begin
null;
end Procedure_2;
begin
null;
end My_Program;
在这个示例中,抽象类型Abstract_Type
定义了两个过程,其中Procedure_2
是抽象过程,需要在派生类型中进行实现。Implementation_Type
是Abstract_Type
的一个派生类型,并覆盖了Procedure_2
过程。注意,需要在覆盖过程前面添加overriding
关键字,这样编译器才能知道这是一个分派过程。
上一篇:Ada/Spark: “gnatprove”中的“platinum”模式在哪里?
下一篇:Ada2012中的错误信息“inheriteddiscriminantnotallowedhere”的中文翻译是什么,如何解决?