문제

IFORT와 함께 명령문에 따라 코드를 컴파일하려고하면 오류를 반환합니다.

    error #8169: The specified interface is not declare

그러나 그것은 Gfortran에서 완벽하게 작동합니다. 어떤 이유로 든 인텔 컴파일러를 사용 하여이 작업을 컴파일해야합니다. 내가 사용하는 언어는 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