2

当我尝试使用 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
4

2 回答 2

2

提供的代码不是合法的 fortran。接口主体内的 use 语句使可访问的名称与虚拟参数相同。这违反了语言的范围规则。

接口主体内的 use 语句似乎是多余的。

于 2013-11-07T21:19:00.793 回答
1

我看不到您首先要在界面中使用 use 语句的原因。甚至可以跳过界面,因为您可以访问正确的过程:

PROCEDURE( invoke_callback ), POINTER :: f_ptr => NULL()
于 2013-11-07T21:30:17.263 回答