Pregunta

Cuando intento compilar el código en la declaración con Ifort, devuelve el error como:

    error #8169: The specified interface is not declare

Pero funciona perfectamente en GFORTRAN, por alguna razón tengo que usar Intel Compiler para compilar este trabajo. El lenguaje que estoy usando es Fortran. La razón de esto es que el compilador 'Ifort' no ve las variables en la interfaz. Así que desarrollo un módulo llamado VAR para arreglar eso. Y úsalo en cada bloque. Pero devuelve el error:

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

El módulo VAR es como seguir:

MODULE VAR
      CHARACTER(50) :: callbackID
END MODULE

¿Cómo puedo solucionar el problema, muchas gracias! Mi versión del compilador es 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
¿Fue útil?

Solución

El Código presentado no es Fortran legal. La declaración de uso dentro del cuerpo de la interfaz hace que sea accesible un nombre que sea el mismo que un argumento ficticio. Esto viola las reglas de alcance del idioma.

La declaración de uso dentro del cuerpo de la interfaz parecería ser superflua.

Otros consejos

No veo la razón por la que desea la declaración de uso en la interfaz en primer lugar. Incluso se puede omitir la interfaz, porque tiene el procedimiento correcto accesible:

PROCEDURE( invoke_callback ), POINTER :: f_ptr => NULL()
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top