Pergunta

Quando tento compilar o código na instrução com ifort, ele retorna um erro como:

    error #8169: The specified interface is not declare

Mas funciona perfeitamente no gfortran, por algum motivo tenho que usar o compilador Intel para compilar este trabalho.A linguagem que estou usando é Fortran.A razão para isso é que o compilador 'ifort' não vê as variáveis ​​na Interface.Então desenvolvi um módulo chamado Var para consertar isso.E use-o em todos os blocos.Mas retorna erro:

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

O módulo var é o seguinte:

MODULE VAR
      CHARACTER(50) :: callbackID
END MODULE

como posso resolver o problema, muito obrigado!Minha versão do compilador é 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
Foi útil?

Solução

O código apresentado não é fortran legal.A instrução use dentro do corpo da interface torna acessível um nome que é igual a um argumento fictício.Isso viola as regras de escopo da linguagem.

A instrução use dentro do corpo da interface parece supérflua.

Outras dicas

Em primeiro lugar, não vejo a razão pela qual você deseja a instrução use na interface.Até a interface pode ser ignorada, porque você tem o procedimento correto acessível:

PROCEDURE( invoke_callback ), POINTER :: f_ptr => NULL()
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top