Interface Ifort编译器不';Fortran语言中的不可识别接口
当我尝试使用ifort编译语句下的代码时,它返回错误为:Interface Ifort编译器不';Fortran语言中的不可识别接口,interface,fortran,intel-fortran,Interface,Fortran,Intel Fortran,当我尝试使用ifort编译语句下的代码时,它返回错误为: error #8169: The specified interface is not declare 但它在gfortran上运行得非常好,出于某种原因,我不得不使用英特尔编译器来编译这项工作。我使用的语言是Fortran。原因是“ifort”编译器在接口中看不到变量。所以我开发了一个名为Var的模块来解决这个问题。在每个街区都使用它。但它返回错误: This USE statement is not positioned c
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。接口主体内的use语句使可访问的名称与伪参数相同。这违反了语言的范围规则
界面主体中的use语句似乎是多余的。我不明白为什么您首先要在界面中使用use语句。甚至可以跳过该接口,因为您可以访问正确的过程:
PROCEDURE( invoke_callback ), POINTER :: f_ptr => NULL()
很抱歉,我现在更新了。由于过程指针的原因,您没有使用Fortran 90,但至少使用Fortran 2003。而且您的代码可以用ifort 14.0编译。所以我需要更新我的ifort…您确实编译了您发布的代码吗?是的,这就是我在后面的注释中尝试解决的问题。问题是我的代码中存在缩进错误,如果我移动所有这些use语句,我就可以在第一行编译而不必缩进。但当我在第一行做缩进时(出于某种原因,我不得不这样做)。我不知道怎么修理它。你能帮我吗@VladimirF@lanHbut模块必须首先执行缩进操作,因为前面有#ifdef_从机。但当我把所有的东西放进模组里作为缩进时。它也不起作用。。。