モジュールで編成された少しのFortranプログラムをプログラムし始めました。各モジュールは、割り振りと割り振り解除のためのサブルーチンの初期化とファイナライズで構成されています。Fortranサブモジュール - モジュールファイルを開くことができません»mod_globals.smod«
ここでは、モジュール「globals
」の中に「Abort」と呼ばれるサブルーチンを持つ循環依存関係があります。このサブルーチンは、エラーが発生した場合に各モジュールがサブルーチンを終了するよう呼び出す必要があります。 "Abort"サブルーチンの呼び出しは、いくつかの計算の後、すべてのモジュールに置かれます。
私の計画は、Fortran 2008(2003)で導入されたサブモジュールを使用することでした。しかし、それは問題を解決することはありません。 Submodules機能が間違っていると理解していますか?
私のFortranコンパイラは私に語った:ここではそのような ファイルまたはディレクトリ
とはありません:
は、(1)で読み込むためのオープンモジュールファイル»mod_globals.smod«することはできませんモジュールのグローバルの部分:ここで
! Module Globals MODULE MOD_GLOBALS IMPLICIT NONE PRIVATE INTERFACE MODULE SUBROUTINE doAbort() END SUBROUTINE doAbort END INTERFACE CONTAINS SUBROUTINE setAbortFlag(fileString,errorLine) ... fill variables with the fileString and errorLine CALL doAbort() END SUBROUTINE setAbortFlag END MODULE MOD_GLOBALS ! Submodule SUBMODULE (MOD_GLOBALS) S_MOD_GLOBALS IMPLICIT NONE CONTAINS MODULE PROCEDURE doAbort USE MOD_TEST, ONLY: finalizeTEST CALL finalizeTEST() EXIT(-1) END PROCEDURE doAbort END SUBMODULE S_MOD_GLOBALS
とテストモジュールのそれぞれのコード部分:
あなたがPRIVATE
声明を取る場合あなたのコードが滞りなくコンパイル...
! Module Test MODULE MOD_TEST IMPLICIT NONE PRIVATE PUBLIC finalizeTEST, doSomeStuff CONTAINS SUBROUTINE finalizeTEST() ... do some deallocations END SUBROUTINE finalizeTEST SUBROUTINE doSomeStuff() USE MOD_GLOBALS, ONLY: setAbortFlag ... maybe error in some calculations CALL setAbortFlag(__FILE__,__LINE__) END SUBROUTINE doSomeStuff END MODULE MOD_TEST
なぜあなたは循環依存性があると思いますか?私は何も見ません。実際のコードを表示する必要があるかもしれません。 –
最初の投稿を私のコードのより高度な例で更新しました。今度は、循環依存関係を可視化する必要があります。サブモジュールは現在動作しますが、循環依存性の問題は解決しませんでした。 – Florian
'' '' setAbortFlag(fileString、errorLine) '' SUBEOUTINE finalizeTEST() '' - これはコードからコピーされたものですか?はいの場合は、そこにタイプミスがあります。 –