Fortran Coder

标题: 数组维数是参数的子程序在主程序中的调用问题 [打印本页]

作者: z871164357    时间: 2022-7-15 18:30
标题: 数组维数是参数的子程序在主程序中的调用问题
子程序的输入输出参数包含一个数组,数组的维数是一个参数,在主程序中调用的时候显示必须是一个虚拟参数,一个公共块对象,或通过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.    [AB]





作者: z871164357    时间: 2022-7-15 18:32
本帖最后由 z871164357 于 2022-7-15 18:33 编辑

F:\Desktop\z1.jpg

z2.jpg (37.2 KB, 下载次数: 98)

z2.jpg

z1.jpg (39.1 KB, 下载次数: 103)

z1.jpg

作者: 青衣巷    时间: 2022-7-15 21:43
[Fortran] 纯文本查看 复制代码
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
你没告诉它AB是多少,你这样的output数组用法是固定大小数组 ,可是你并没有给出数组大小。你把integer ab 改成integer,parameter::ab=1 就行了




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2