將函數作爲參數正確傳遞給子例程時出現問題。函數`f`在作爲參數傳遞給Fortran子例程時沒有隱式類型
我最初在一個.f90文件中編寫程序,但我不得不切換到CodeBlocks,因此需要將我的模塊拆分爲單獨的文件。我遇到了一個我認爲在分割之前不存在的錯誤:
程序使用名爲「diff_eq.f90」的模塊,該模塊又調用名爲「find_root」的子例程。該子程序位於名爲「roots.f90」的不同模塊中。
模塊 「diff_eq」 呼籲通過 「find_roots」:
module diff_eq
contains
function solve_star([bunch of arguments]) result(r)
use roots
real(8) :: r,[bunch of arguments]
call find_root(f,df,[bunch of arguments])
end function solve_star
end module diff_eq
的參數 「F,DF」 是在另一個模塊名爲 「wdstar.f90」 中定義的功能。例如,對於 「F」 的宣言是
function f(r)
real(8),intent(in) :: r(:)
real(8) :: f(size(r))
integer :: i,n
real(8) :: dns(size(r)),prs(size(r))
[bunch of calculations f(n) = ...]
end function 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」的正確方法是什麼?
目前,我得到一個錯誤:Symbol "f" has no IMPLICIT type
爲什麼顯然?如果很明顯,你爲什麼要問這裏?什麼是**完整**輸出?編譯器是否報告錯誤發生的代碼行? –
@VladimirF對於單詞的選擇我表示歉意。在詢問這裏之前,我做了一些閱讀,並且我承認這些東西需要明確定義一種類型,否則有時會收到一些默認類型。所以我明白爲什麼應該爲函數分配一些類型,但我不明白它應該是什麼。 – Yoni
你的意思是錯誤的完整輸出?編譯器會報告「solve_star」函數中的「調用find_root(f,df,[一堆參數])」行上的錯誤 – Yoni