我承认标题可能有点模糊,所以让我举一个例子,说明我想做什么和什么不行。我有一个主程序调用模块中的子程序:
Program Test_program
Use module_A
Implicit none
Integer :: i
i = 1
call subroutine_A(i)
End program Test_program
这个子程序_A在模块A中,然后轮流调用module_B中的function_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
程序和模块位于不同的文件中。不幸的是,这不会编译,因为我收到一条错误消息:
ERROR Subroutine_A:对子程序function_B的引用不在CALL语句中。
程序似乎认为function_B是一个子程序,所以我不知道该怎么做。 顺便说一句,我正在尝试使用模块按照我的方式对我的子程序和函数进行适当的封装,但是如果这不是正确的方式我愿意接受建议(我被告知不要使用接口而是使用模块而不是这个检验)。
由于
答案 0 :(得分:0)
道歉,我实际上“解决了”这个谜团:我没有使用名称function_B,而是使用名称Compute_Error。当我将该函数名称更改为其他名称时,上述方法有效。似乎我链接到某个地方的某个库有一个子程序compute_error,虽然错误消息没有告诉我哪一个,或者这是否是肯定的问题。无论如何,再次抱歉,但我想我可以发帖,因为它有助于了解如何链接模块和程序(我没有在互联网上找到该特定示例的许多示例)。 当然这种使用模块和程序的方式不是正确的方法,随意添加一些有用的知识。