【发布时间】:2016-05-02 08:01:53
【问题描述】:
我有一个 Fortran 子例程,它需要一个复杂的数组,例如
subroutine foo(cnumbers, n)
integer :: n
complex :: cnumbers(n)
...
end subroutine foo
后来我想这样称呼它
real :: rnumbers(40)
...
call foo(rnumbers, 20)
但是,我得到编译器错误:
错误 #6633:实际参数的类型与虚拟参数的类型不同。
当然,这是可以理解的,因为实数数组不是复数数组。但必须有办法让它发挥作用。
因为如果子例程foo 和foo 的调用在不同的模块中并且写在不同的Fortran 文件中,那么编译器确实不会 报错,并且一切正常。
有人知道如何让它工作吗?如果需要一个复杂的数组,如何传递一个实数数组?
【问题讨论】:
-
您应该在调用方显示更多代码。如果
rnumbers不是虚拟参数,则可以将其与复杂数组等效。 -
不,
rnumbers不是虚拟变量,它是我使用real :: rnumbers(40)创建的实际变量。顺便说一句,我使用的是 Intel Fortran 编译器 15.0.3。 -
如果您的子程序是外部的(没有显式接口),您的编译器将不会检测到类型问题并且它会正常工作。
标签: arrays fortran complex-numbers