Fortran Coder

查看: 160|回复: 3

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

[复制链接]

2

帖子

1

主题

0

精华

新人

F 币
12 元
贡献
5 点
发表于 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.    [AB]




2

帖子

1

主题

0

精华

新人

F 币
12 元
贡献
5 点
 楼主| 发表于 2022-7-15 18:32:33 | 显示全部楼层
本帖最后由 z871164357 于 2022-7-15 18:33 编辑

F:\Desktop\z1.jpg
z2.jpg
z1.jpg

67

帖子

0

主题

0

精华

专家

F 币
415 元
贡献
206 点

规矩勋章新人勋章元老勋章

QQ
发表于 2022-7-15 21:43:22 | 显示全部楼层
[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
彼岸,有永恒的守候...

38

帖子

3

主题

0

精华

熟手

F 币
154 元
贡献
77 点
发表于 2022-7-18 20:24:26 | 显示全部楼层
你没告诉它AB是多少,你这样的output数组用法是固定大小数组 ,可是你并没有给出数组大小。你把integer ab 改成integer,parameter::ab=1 就行了
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2022-8-11 07:18

Powered by Tencent X3.4

© 2013-2022 Tencent

快速回复 返回顶部 返回列表