实例化通用过程时出错

时间:2014-11-28 10:26:24

标签: ada

您好我正在创建通用程序,它将交换下面的2个数字是我的代码请帮我解决它..我是新ada编程请跳过如果任何错误的错误因为我发布这个questn frm移动我没有我的系统网

swap.ads

generic
   type t is private;
procedure swap(l,r:in out t);

swap.adb

procedure swap(l,r:in out t) is
   temp:t:=l;
begin
   l:=r;
   r:=temp;
end swap;

swap_main.adb

v with swap;
procedure swap_main is
   procedure swap_i is new swap(t);
   i1,i2:interger;
begin
   swap_i(i1,i2):
end swap_main;

1 个答案:

答案 0 :(得分:4)

不考虑简单的拼写错误(v with swapinterger和最后一个冒号):关于实例化泛型的事情是你必须提供 actuals < EM>缩甲醛

在这种情况下,你说(在将案例和间隔调整为普遍接受的规范之后)

generic
   type T is private;
procedure Swap (L, R : in out T);

其中T是形式参数,它期望赋值和等于运算符”=“在实际中可用。

但是在你的实例化中你说

procedure Swap_I is new Swap (T);

并且编译器说

rahul.ada:12:34: "T" is undefined
rahul.ada:12:34: instantiation abandoned
rahul.ada:15:04: "Swap_I" is undefined
rahul.ada:15:04: possible misspelling of "Swap_"
gnatmake: "swap_main.adb" compilation error

第二条消息解释了第三条消息。第四条消息是编译器尝试失败的尝试失败(毕竟Swap_不是合法的标识符。)

第一条消息是密钥:T没有可见的Swap_Main类型,Swap的形式参数T是实际的。

我认为总的来说你应该写

procedure Swap_I is new Swap (Integer);

为您提供一个能够交换整数的过程。

“命名协会”(Ada 95 Quality and Style Guide, section 5.2.2)会让您的意图更清晰:

procedure Swap_I is new Swap (T => Integer);