数组维数是参数的子程序在主程序中的调用问题
子程序的输入输出参数包含一个数组,数组的维数是一个参数,在主程序中调用的时候显示必须是一个虚拟参数,一个公共块对象,或通过host或use关联访问的对象,问下大佬这个因该怎么解决,附程序代码,很简单的一个例子subroutine aabs(input,output(ab)) integer ab DOUBLE PRECISION input,output(ab) ab=2 do i=1,ab output(i)=abs(input) end do return end
program test01
integer ab DOUBLE PRECISION input,output(ab) input=-1 call aabs(input,output(ab))
end program test01
报错信息:error #6219: This variable, used in a specification expression, must be a dummy argument, a COMMON block object, or an object accessible through host or use association.
本帖最后由 z871164357 于 2022-7-15 18:33 编辑
F:\Desktop\z1.jpg Module aaa
contains
subroutine aabs(input,output)
integer ab , i
DOUBLE PRECISION input,output(:)
ab=size(output)
do i=1,ab
output(i)=abs(input)
end do
end subroutine aabs
End Module aaa
program test01
use aaa
integer , parameter :: n = 2
DOUBLE PRECISION input,output(n)
input=-1
call aabs(input,output)
end program test01 你没告诉它AB是多少,你这样的output数组用法是固定大小数组 ,可是你并没有给出数组大小。你把integer ab 改成integer,parameter::ab=1 就行了
页:
[1]