提出的代码不是合法的。接口主体内的使用语句使可访问的名称与虚拟参数相同。这违反了语言的范围规则。
接口主体内部的使用语句似乎是多余的。
题
当我尝试使用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
解决方案
提出的代码不是合法的。接口主体内的使用语句使可访问的名称与虚拟参数相同。这违反了语言的范围规则。
接口主体内部的使用语句似乎是多余的。
其他提示
我看不出您首先要在接口中使用使用语句的原因。甚至可以跳过界面,因为您可以访问正确的过程:
PROCEDURE( invoke_callback ), POINTER :: f_ptr => NULL()