Domanda

Quando provo a compilare il codice sotto l'istruzione con ifort, restituisce errore come:

    error #8169: The specified interface is not declare

Ma funziona perfettamente su Gfortran, per qualche motivo devo usare il compilatore Intel per compilare questo lavoro. La lingua che sto usando è Fortran. La ragione di ciò è che il compilatore "iFort" non vede le variabili nell'interfaccia. Quindi sviluppo un modulo chiamato var per risolverlo. E usalo in ogni blocco. Ma restituisce errore:

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

Il modulo var è come segue:

MODULE VAR
      CHARACTER(50) :: callbackID
END MODULE

Come posso risolvere il problema grazie mille! La mia versione del compilatore è 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
È stato utile?

Soluzione

Il codice come presentato non è legale. L'istruzione di utilizzo all'interno del corpo dell'interfaccia rende accessibile un nome uguale a un argomento fittizio. Ciò viola le regole di scoping della lingua.

L'istruzione di utilizzo all'interno del corpo dell'interfaccia sembrerebbe superflua.

Altri suggerimenti

Non vedo il motivo per cui vuoi l'istruzione d'uso nell'interfaccia in primo luogo. Anche l'interfaccia può essere saltata, perché hai la procedura giusta accessibile:

PROCEDURE( invoke_callback ), POINTER :: f_ptr => NULL()
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top