Function 传递函数中的Fortran错误

Function 传递函数中的Fortran错误,function,fortran,Function,Fortran,我正在尝试编写一个简单的Fortran代码来计算h=g(f(x))。x是长度为2的向量 module m1 implicit none contains function f(x) implicit none real::f(2),x(2) f(1)=x(1)-x(2) f(2)=exp(x(1))-x(2)**2 end function f function g(ff) implicit none real::g(2),x1(2),ffreslt(2) interface fun

我正在尝试编写一个简单的Fortran代码来计算h=g(f(x))。x是长度为2的向量

module m1
implicit none
contains

function f(x)
implicit none
real::f(2),x(2)
f(1)=x(1)-x(2)
f(2)=exp(x(1))-x(2)**2
end function f

function g(ff)
implicit none
real::g(2),x1(2),ffreslt(2)
interface
    function ff(x)
    implicit none
    real::x(2),ff(2)
    end function ff
end interface
ffreslt=ff(x1)
g(1)=1-ffreslt(1)
g(2)=2*ffreslt(1)**2-3*ffreslt(2)+4.2
end function g

end module m1

program hgf
use m1
implicit none
real::x1(2),h(2)
x1 = (/0.55,2.47/)
h = g(f(x1))

write(*,*) h

end program hgf
但是,我收到了以下错误消息:

h = g(f(x1))
      1
Error: Actual parameter 'ff' at <1> is not a PROCEDURE
h=g(f(x1))
1.
错误:处的实际参数“ff”不是过程
我错过什么了吗?谢谢

在对g()的调用中,传递的不是函数f(),而是调用值为x1的函数f()的结果

检查此项并查看第24页第3.2.7节

还要检查这个问题。

在对g()的调用中,您传递的不是函数f(),而是调用值为x1的函数f()的结果

检查此项并查看第24页第3.2.7节


同时检查这个问题。

您应该分别传递函数和
x1
向量。注意:您不需要在每个子例程中重复“隐式无”。只需在模块顶部声明一次就足够了(唯一的例外是接口块,您需要在其中重复它)。您应该分别传递函数和
x1
向量。注意:您不需要在每个子例程中重复“隐式无”。只需在模块顶部声明一次就足够了(唯一的例外是接口块,您需要在其中重复它)。