z871164357 发表于 2022-7-15 18:30:37

数组维数是参数的子程序在主程序中的调用问题

子程序的输入输出参数包含一个数组,数组的维数是一个参数,在主程序中调用的时候显示必须是一个虚拟参数,一个公共块对象,或通过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:32:33

本帖最后由 z871164357 于 2022-7-15 18:33 编辑

F:\Desktop\z1.jpg

青衣巷 发表于 2022-7-15 21:43:22

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

zjk0112 发表于 2022-7-18 20:24:26

你没告诉它AB是多少,你这样的output数组用法是固定大小数组 ,可是你并没有给出数组大小。你把integer ab 改成integer,parameter::ab=1 就行了
页: [1]
查看完整版本: 数组维数是参数的子程序在主程序中的调用问题