在Ada中,当一个子程序从一个接口继承并重载时出现“非法重载继承自接口的子程序”错误,通常是因为在子程序的参数列表中没有正确地匹配接口中的定义。
以下是一个解决方法的示例:
with Ada.Text_IO;
procedure Main is
package My_Interface is
type My_Type is private;
procedure My_Proc (Item : in My_Type);
procedure My_Proc (Item : in out My_Type);
private
type My_Type is new Integer;
end My_Interface;
package body My_Interface is
procedure My_Proc (Item : in My_Type) is
begin
Ada.Text_IO.Put_Line("In My_Proc (in)");
end My_Proc;
procedure My_Proc (Item : in out My_Type) is
begin
Ada.Text_IO.Put_Line("In My_Proc (in out)");
end My_Proc;
end My_Interface;
type My_Type_Impl is new My_Interface.My_Type;
procedure My_Proc (Item : in My_Type_Impl) is
begin
Ada.Text_IO.Put_Line("In My_Proc (in)");
end My_Proc;
procedure My_Proc (Item : in out My_Type_Impl) is
begin
Ada.Text_IO.Put_Line("In My_Proc (in out)");
end My_Proc;
Item : My_Type_Impl;
begin
My_Proc(Item); -- 调用重载的子程序
end Main;
在这个示例中,我们定义了一个接口My_Interface
,其中包含了一个私有类型My_Type
和两个重载的子程序My_Proc
。然后,我们定义了一个派生类型My_Type_Impl
并实现了两个重载的子程序My_Proc
。在Main
过程中,我们创建了一个My_Type_Impl
类型的对象Item
,并调用了重载的子程序My_Proc(Item)
。
通过在派生类型中重新定义重载的子程序,并确保参数列表与接口中的定义匹配,我们可以解决“非法重载继承自接口的子程序”错误。
下一篇:Ada与标签字段重叠