我承认标题可能有点晦涩难懂,所以让我举个例子说明我想做什么和不做什么。我有一个主程序,它调用一个模块中的子程序:
Program Test_program
Use module_A
Implicit none
Integer :: i
i = 1
call subroutine_A(i)
End program Test_program
这个 subroutine_A 在模块 A 中,然后调用模块 B 中的函数 B:
module module_A
use module_B
implicit none
contains
subroutine subroutine_A(i)
implicit none
integer, intent(in) :: i
double precision :: j
j = function_B(i)
end subroutine subroutine_A
end module module_A
最后,module_B 看起来像这样:
module module_B
Implicit none
Contains
double precision function function_B(i)
implicit none
integer,intent(in) :: i
function_B = 5.d0*i
end function function_B
end module module_B
程序和模块在不同的文件中。不幸的是,这不会编译,因为我收到一条错误消息:
错误 Subroutine_A:对子程序 function_B 的引用不在 CALL 语句中。
程序似乎认为 function_B 是一个子程序,所以我不知道该怎么做。顺便说一句,我正在尝试按照我被告知的那样使用模块对我的子例程和函数进行适当的封装,但是如果这不是正确的方式,我愿意接受建议(我被告知不要使用接口,而是使用模块,因此这个测试)。
谢谢