您好我正在创建通用程序,它将交换下面的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;
答案 0 :(得分:4)
不考虑简单的拼写错误(v with swap
,interger
和最后一个冒号):关于实例化泛型的事情是你必须提供 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);