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
Pointers FORTRAN中指向子例程的指针_Pointers_Fortran_Subroutine - Fatal编程技术网

Pointers FORTRAN中指向子例程的指针

Pointers FORTRAN中指向子例程的指针,pointers,fortran,subroutine,Pointers,Fortran,Subroutine,可能重复: 在FORTRAN中,如何创建和使用指向子例程的指针 此外,是否有可能在不同的子例程中有一个指针孔数组 我知道这些东西可以很容易地用C实现,但是FORTRAN呢 编辑 我已尝试使用以下命令: PROCEDURE (), POINTER :: pMYSUB => NULL() POINTER(pMYSUB, MYSUB) 我将pMYSUB指针指向子例程: pMYSUB => MYSUB 我还将MYSUB子例程放入接口: INTERFACE SUBROUTI

可能重复:

在FORTRAN中,如何创建和使用指向子例程的指针

此外,是否有可能在不同的子例程中有一个指针孔数组

我知道这些东西可以很容易地用C实现,但是FORTRAN呢

编辑

我已尝试使用以下命令:

PROCEDURE (), POINTER :: pMYSUB => NULL()
POINTER(pMYSUB, MYSUB)
我将pMYSUB指针指向子例程:

pMYSUB => MYSUB 
我还将MYSUB子例程放入接口:

INTERFACE 
   SUBROUTINE MYSUB 
   END SUBROUTINE
END INTERFACE
MYSUB子例程没有参数。问题是,当我使用:

call pMYSUB
我得到了链接错误:未解析的外部符号_pMYSUB。 我做错了什么? 命令:

PROCEDURE (), POINTER :: pMYSUB => NULL()
POINTER(pMYSUB, MYSUB)

是使点pMYSUB指向子程序MYSUB的另一种方法吗?

Fortran中的函数指针称为“过程指针”,是Fortran 2003标准的一部分。现在许多现代编译器都支持它们。还有一种非常有限的函数指针形式,至少可以返回到F77,其中可以有一个过程参数,它是一个过程;但在F2003之前不能有普通函数指针变量。如果你在谷歌上搜索到基于上述内容的东西后仍有问题,请发布一些你正在编写的代码,我相信有人会帮你解决


Wrt。指针数组,由于某些原因不允许使用。常见的解决方法是创建带有指针组件的派生类型,然后生成这些派生类型的数组。

问题在于我的子例程名为DO\u CALC,出于某种原因,该语句:

PROCEDURE (DO_CALC), POINTER :: pDO_CALC => NULL()
我不喜欢编译程序。我更改了子程序的名称,现在可以正常工作了


@Janneb,使用派生类型数组而不是Fortran中不允许的函数指针数组是个好主意

谢谢你的快速回答。我已经编辑了我的第一篇文章。一定是另一个错误。没有理由认为它应该使用一个名称而不使用另一个名称。我得到的错误是与DO#u计算名称有关的错误是:error#5082:语法错误,在需要以下之一时找到“DO:)类型复杂字节字符DOUBLE DOUBLECOMPLEX DOUBLEPRECISION整数逻辑。。。错误#8169:未声明指定的接口。[\u CALC]@helios21:那么,听起来像是解析器中的一个bug,请向编译器供应商报告。最近的堆栈溢出问题与此类似,并有示例代码: