Function Fortran:从另一个模块中的过程调用模块中的函数

Function Fortran:从另一个模块中的过程调用模块中的函数,function,module,fortran,encapsulation,subroutine,Function,Module,Fortran,Encapsulation,Subroutine,我承认标题可能有点晦涩,所以让我举个例子,说明我想做什么,什么不起作用。我有一个主程序,它调用模块中的子程序: Program Test_program Use module_A Implicit none Integer :: i i = 1 call subroutine_A(i) End program Test_program 该子例程_A位于模块A中,并依次调用模块_B中的函数_B: module module_A use module_B implicit none cont

我承认标题可能有点晦涩,所以让我举个例子,说明我想做什么,什么不起作用。我有一个主程序,它调用模块中的子程序:

Program Test_program

Use module_A
Implicit none
Integer :: i
i = 1
call subroutine_A(i)

End program Test_program
该子例程_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
最后,模块_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
程序和模块位于不同的文件中。不幸的是,这无法编译,因为我收到一条错误消息:

错误子程序_A:调用语句中不存在对子程序函数_B的引用

程序似乎认为函数_B是一个子程序,所以我不知道该怎么做。 顺便说一句,我正试图使用模块对我的子程序和函数进行适当的封装,但如果这不是正确的方式,我会接受建议(我被告知不要使用接口,而是使用模块,因此这次测试)

谢谢

我的道歉,我实际上“解决”了这个谜:我没有使用name函数,而是使用name Compute错误。当我将该函数名更改为其他名称时,上述方法有效。似乎我链接到某个地方的某个库有一个子例程compute_错误,尽管错误消息没有告诉我是哪一个,或者这是否确实是问题所在。无论如何,再次抱歉,但我想我可以让帖子,因为它有助于了解如何链接模块和过程(我在互联网上没有找到很多关于该特定示例的示例)。
当然,这种使用模块和过程的方式不是正确的方式,请随意添加一些有用的知识。

因此,您的实际代码有一个名称冲突,这在原始问题中没有演示。正当