虚拟实参关联的实际过程与虚拟过程的虚参不同

时间:2018-11-06 02:37:44

标签: fortran fortran90

我正在使用IMSL Fortran库中的函数NEQNF来解决非线性方程组并得到3个错误。我在x64系统上使用Visual Studio 2017。该错误表示以下内容:

Error #7061: The characterístic of dummy argument 1 of the associated actual procedure differ from the characteristics of dummy argument 1 of the dummy procedure [FCN_SS]


Error #7062: The characterístic of dummy argument 2 of the associated actual procedure differ from the characteristics of dummy argument 2 of the dummy procedure [FCN_SS]

Error #7063: The characterístic of dummy argument 3 of the associated actual procedure differ from the characteristics of dummy argument 3 of the dummy procedure [FCN_SS]

代码是:

    include 'link_fnl_shared.h' 

    use neqnf_int
    use umach_int

    implicit none

!Declaring variables
    .
    .
    .

    Contains

    subroutine solve_ss(x, fnorm)

        integer n
        parameter (n=2)

        integer k, nout
        real(dp) :: fnorm, x(n), xguess(n)

        data xguess/1.0_dp, 0.3_dp/   !guess for total output in units

        call umach (2, nout)
        call neqnf (fcn_ss, x, xguess=xguess, fnorm=fnorm)

    end subroutine solve_ss


    subroutine fcn_ss(x, f, n)

        implicit none

        !specification
        integer n
        real(dp) :: x(n), f(n)

    .
    .
    .

    F(1)=...

    F(2)=...

    end subroutine fcn_ss

我不确定错误的出处,因为变量solve_ssfcn_ss中的变量声明是相同的。

1 个答案:

答案 0 :(得分:0)

该库的文档明确指出(herehere),您需要use各个模块才能访问例程的现代实现。

否则,您可能(无法测试,但我基于this)正在访问该库的旧有支持。因此,它可能会导致您转到FORTRAN77特定的接口,而不是通用的Fortran 90接口:

NEQNF (FCN, ERRREL, N, ITMAX, XGUESS, X, FNORM)

其他细节是文档明确指出必须将传递的函数声明为外部函数:

external fcn_ss

不过,我不确定那些猜测。可能是该错误或其他任何奇怪的错误。请提供反馈。