使用过程指针和用户定义的类型时出错(Fortran 2003)

时间:2019-01-15 19:36:51

标签: pointers types fortran

在创建参数为用户定义类型的过程指针时遇到麻烦。这是示例代码

    module general
        use, intrinsic :: iso_fortran_env, only: dp => real64
        implicit none
    type parametros
    integer :: N 
    real(dp) :: mu
    end type parametros

    type ptr_wrapper
    procedure(f), nopass, pointer :: func
    end type ptr_wrapper

    abstract interface
    function f(x1,y)
    import
    real(dp), intent(in) :: x1
    type(parametros) :: y
    real(dp) :: f
    end function f
    end interface

abstract interface
function Prod(x,y)
    import
    real(dp),intent(in) :: x
    type (parametros) ,intent(in):: y
    real(dp) :: Prod
end function
end interface
end module general

module integrandos
use, intrinsic :: iso_fortran_env, only: dp => real64
use general
implicit none

contains
function DUMMYS (x,y) result(VD)
real(dp),intent(in) :: x
type(parametros),intent(in) ::y
real(dp) :: VD
VD = y%mu + x
end function DUMMYS

end module integrandos

program main
use, intrinsic :: iso_fortran_env, only: dp => real64
use general
use integrandos

type(parametros) :: y
    y%N = 12
    y%mu = 5.0d0

procedure(Prod),pointer :: DM_ptr
DM_ptr => DUMMYS

end program main 

这是一个测试代码,我需要将其作为指针,因为我会将其用作另一个函数的参数。当我用gfortran进行复制时,出现以下错误

  procedure(Prod),pointer :: DM_ptr
                              1
  Error: Unexpected PROCEDURE statement at (1)
  structure.f03:259:17:

  DM_ptr => DUMMYS
             1
  Error: Function ‘dummys’ requires an argument list at (1)

我不知道为什么会这样,因为我创建了过程Prod,其过程的参数是实数类型和用户定义的类型(参数)

1 个答案:

答案 0 :(得分:1)

Fortran对语句的顺序有要求。 y%N = 12y%mu = 5.0d0是可执行语句。 procedure(Prod),pointer :: DM_ptr语句不能出现在可执行语句之后。