在创建参数为用户定义类型的过程指针时遇到麻烦。这是示例代码
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,其过程的参数是实数类型和用户定义的类型(参数)
答案 0 :(得分:1)
Fortran对语句的顺序有要求。 y%N = 12
和y%mu = 5.0d0
是可执行语句。 procedure(Prod),pointer :: DM_ptr
语句不能出现在可执行语句之后。