Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Interface Ifort编译器不';Fortran语言中的不可识别接口_Interface_Fortran_Intel Fortran - Fatal编程技术网

Interface Ifort编译器不';Fortran语言中的不可识别接口

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

当我尝试使用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。接口主体内的use语句使可访问的名称与伪参数相同。这违反了语言的范围规则


界面主体中的use语句似乎是多余的。

我不明白为什么您首先要在界面中使用use语句。甚至可以跳过该接口,因为您可以访问正确的过程:

PROCEDURE( invoke_callback ), POINTER :: f_ptr => NULL()

很抱歉,我现在更新了。由于过程指针的原因,您没有使用Fortran 90,但至少使用Fortran 2003。而且您的代码可以用ifort 14.0编译。所以我需要更新我的ifort…您确实编译了您发布的代码吗?是的,这就是我在后面的注释中尝试解决的问题。问题是我的代码中存在缩进错误,如果我移动所有这些use语句,我就可以在第一行编译而不必缩进。但当我在第一行做缩进时(出于某种原因,我不得不这样做)。我不知道怎么修理它。你能帮我吗@VladimirF@lanHbut模块必须首先执行缩进操作,因为前面有#ifdef_从机。但当我把所有的东西放进模组里作为缩进时。它也不起作用。。。