質問

Ifortを使用してステートメントの下でコードをコンパイルしようとすると、次のようにエラーを返します。

    error #8169: The specified interface is not declare

しかし、GFORTRANで完全に機能します。何らかの理由で、Intelコンパイラを使用してこの作業をコンパイルする必要があります。私が使用している言語はFortranです。この理由は、「ifort」コンパイラがインターフェイスに変数が表示されないためです。そこで、それを修正するためにVARと呼ばれるモジュールを開発します。すべてのブロックで使用します。しかし、それはエラーを返します:

This USE statement is not positioned correctly within the scoping unit.

VARモジュールは次のようなものです。

MODULE VAR
      CHARACTER(50) :: callbackID
END MODULE

どうすれば問題を解決できますか?私のコンパイラバージョンはiFort 12.1.0です

      MODULE DEMO
      USE VAR
      INTERFACE
        SUBROUTINE callback_prototype(callbackID)
            USE VAR
            CHARACTER(*) :: callbackID
        END SUBROUTINE callback_prototype
      END INTERFACE

      PROCEDURE( callback_prototype ), POINTER :: f_ptr => NULL()

      CONTAINS
      SUBROUTINE set_callback(func)
         IMPLICIT NONE
         EXTERNAL :: func

          f_ptr => func
          call HELLO
      END SUBROUTINE

      SUBROUTINE invoke_callback(callbackID)
          CHARACTER(*) :: callbackID
          if (associated(f_ptr)) call f_ptr(callbackID)
      END SUBROUTINE

      SUBROUTINE HELLO

      IMPLICIT NONE

      !dosomthing


      END SUBROUTINE
      END MODULE
役に立ちましたか?

解決

提示されているコードは、合法的なFortranではありません。インターフェイス本体内の使用ステートメントは、ダミー引数と同じ名前にアクセスしやすくなります。これは、言語のスコーピングルールに違反します。

インターフェイス本体内の使用ステートメントは不必要に見えます。

他のヒント

そもそもインターフェイスで使用ステートメントを使用したい理由はわかりません。適切な手順にアクセスできるため、インターフェイスをスキップできます。

PROCEDURE( invoke_callback ), POINTER :: f_ptr => NULL()
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top