Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
函数“f”作为参数传递给Fortran子例程时没有隐式类型_Fortran - Fatal编程技术网

函数“f”作为参数传递给Fortran子例程时没有隐式类型

函数“f”作为参数传递给Fortran子例程时没有隐式类型,fortran,Fortran,我在将函数作为参数正确传递给子例程时遇到了一个问题 我最初在一个.f90文件中编写了这个程序,但我不得不切换到代码块,因此需要将模块拆分为单独的文件。我遇到了一个我认为在拆分之前不存在的错误: 该程序使用名为“diff_eq.f90”的模块,该模块依次调用名为“find_root”的子例程。此子例程位于名为“roots.f90”的不同模块中 模块“diff_eq”通过以下方式调用“查找根”: 参数“f,df”是在另一个名为“wdstar.f90”的模块中定义的函数。例如,“f”的声明是 程序本身

我在将函数作为参数正确传递给子例程时遇到了一个问题

我最初在一个.f90文件中编写了这个程序,但我不得不切换到代码块,因此需要将模块拆分为单独的文件。我遇到了一个我认为在拆分之前不存在的错误:

该程序使用名为“diff_eq.f90”的模块,该模块依次调用名为“find_root”的子例程。此子例程位于名为“roots.f90”的不同模块中

模块“diff_eq”通过以下方式调用“查找根”:

参数“f,df”是在另一个名为“wdstar.f90”的模块中定义的函数。例如,“f”的声明是

程序本身包含所有声明:

use diff_eq
use roots
use wdstar
最后,“find_root”通过以下方式声明这些函数:

subroutine find_root(f,df,r,[arguments])
    real(8),intent(in out) :: r(n)
    real(8) :: [more arguments]
    interface
       function f(r)
         real(8),intent(in) :: r(:)
         real(8) :: f(size(r))
       end function f
       function df(r)
         real(8),intent(in) :: r(:)
         real(8) :: df(size(r),size(r))
       end function df
    end interface

    [bunch o' calcs]

    end subroutine find_root
我的问题是:传递这些函数到“find_root”的正确方法是什么


此时我得到一个错误:
符号“f”没有隐式类型

我在
diff\u eq
中看不到任何
f
的声明。(如果有,请出示。)

如果
f
是外部的,则将其声明为外部的。或者使用
f
所在的适当模块(如果位于模块中)


您可能只是缺少了
使用wdstar
,但您只显示了代码的一小部分,所以我不确定。

为什么?如果这是显而易见的,你为什么在这里问?完整输出是什么?当错误发生时,编译器会报告代码行吗?@VladimirF我很抱歉用词不当。在问这个问题之前,我读了一些书,我理解需要显式地定义一个类型,否则有时会收到一些默认类型。所以我理解为什么应该有一些类型分配给函数,但我不理解它应该是什么。你是说错误的完整输出?编译器在“solve_star”函数中的“call find_root(f,df,[一堆参数])”行报告错误
use diff_eq
use roots
use wdstar
subroutine find_root(f,df,r,[arguments])
    real(8),intent(in out) :: r(n)
    real(8) :: [more arguments]
    interface
       function f(r)
         real(8),intent(in) :: r(:)
         real(8) :: f(size(r))
       end function f
       function df(r)
         real(8),intent(in) :: r(:)
         real(8) :: df(size(r),size(r))
       end function df
    end interface

    [bunch o' calcs]

    end subroutine find_root