我有一个Fortran子程序希望像传递,如果一个复杂的阵列预计
subroutine foo(cnumbers, n)
integer :: n
complex :: cnumbers(n)
...
end subroutine foo
后来一系列复杂我想这样称呼它
real :: rnumbers(40)
...
call foo(rnumbers, 20)
不过,我得到一个真正的数组编译器错误:
error #6633: The type of the actual argument differs from the type of the dummy argument.
当然,这是可以理解的,因为一个真正的数组不是一个复杂的数组。但是,必须有一种方法来使其工作。
因为如果子程序foo
和foo
通话是在不同的模块,并在不同的Fortran文件都写下来,那么编译器不抱怨,一切工作正常。
有人知道如何使它工作吗?如果预计复杂的数组如何传递实数组?
您应该在主叫方显示更多代码。如果'rnumbers'不是一个虚拟参数,你可以将它与一个复杂的数组等价。 –
不,'rnumbers'不是虚拟的,它是我用'real :: rnumbers(40)'创建的实际变量。顺便说一下,我正在使用英特尔Fortran编译器15.0.3。 – thyme
如果你的子程序是外部的(没有显式接口),你的编译器不会检测到类型问题,它会正常工作。 – agentp