Ada程序报错:'actual for item must be a variable'原因及解决咨询
问题分析与解决
报错原因
Ada子程序中,Int1和Int2被声明为in Integer模式,这类参数属于只读输入参数,只能读取其值,无法在子程序内部修改。而Get过程需要接收一个可写的变量来存储用户输入的数值,因此传入in模式的参数会触发"actual for item must be a variable"错误。
解决方法
将Int1和Int2的参数模式改为in out,这种模式允许子程序读取参数的初始值并修改它,满足Get过程的要求。修改后的子程序代码如下:
procedure Summera(Int1: in out Integer; Int2: in out Integer; Summa: out Integer) is begin Put("Mata in ett heltal: "); Get(Int1); Put("Mata in ett heltal: "); Get(Int2); Summa:= Int1 + Int2; Put("Du matade in heltalet: "); Put(Int1, Width=>0); Put(" och heltalet: "); Put(Int2, Width=>0); Put(" och summan blev "); end Summera;
主程序代码无需修改(注意Ada主程序的结束语句通常为end;,如果你的程序名是program,end program;也可以正常编译):
Int1, Int2: Integer; Summa: Integer; begin Summera(Int1, Int2, Summa); Put(Summa); end program;
补充说明
in模式:仅用于输入,参数值在子程序内不可修改,适合不需要改变的输入数据。in out模式:用于既需要输入初始值、又需要输出修改后值的参数,相当于双向传递。out模式:仅用于输出,子程序会覆盖参数的初始值,适合只需要返回结果的场景(比如这里的Summa)。
内容的提问来源于stack exchange,提问作者Zeptuz
相关产品推荐
相关产品推荐

