2012-01-04 50 views
2

Possible Duplicate:
Function pointer arrays in Fortran
How to alias a function name in Fortran指针子程序在FORTRAN

我有一个问题,我需要你的帮助。我在互联网上搜索了很多,但我找不到明确的解决方案。

这是我的问题:在FORTRAN中,我如何创建和使用指向子例程的指针?

此外,是否有可能有指向各种子程序的指针孔阵列?

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

请帮忙...

谢谢先进。 :)

编辑

我曾尝试使用下面的命令:

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

我做pMYSUB指针在子程序点:

pMYSUB => MYSUB 

我也把MYSUB子程序进入INTERFACE:

INTERFACE 
    SUBROUTINE MYSUB 
    END SUBROUTINE 
END INTERFACE 

MYSUB子程序没有参数。问题是,当我使用:

call pMYSUB 

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

POINTER(pMYSUB, MYSUB) 

是使点pMYSUB在子程序MYSUB点的另一种方式?

非常感谢。

+0

这最近的堆栈溢出问题是相似的,并有示例代码:http://stackoverflow.com/questions/8612466/how-to-alias-a-function-name-in-fortran/8612679 – 2012-01-05 05:14:49

回答

3

Fortran中的函数指针称为“过程指针”,它是Fortran 2003标准的一部分。许多现代编译器如今都支持它们。还有一个非常有限的函数指针形式,至少返回F77,在那里你可以有一个过程参数,它是一个过程;但是在F2003之前,你不能有正常的函数指针变量。如果您在根据上述内容搜索了某些内容之后仍然有问题,请发布您正在编写的一些代码,我相信有人会帮助您。

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

+0

谢谢你的快速回答。我编辑了我的第一篇文章。 – helios21 2012-01-04 22:16:55

3

谢谢你的答案。

问题终于有人认为我的子程序的名字是DO_CALC,以及由于某种原因,声明

PROCEDURE (DO_CALC), POINTER :: pDO_CALC => NULL() 

不喜欢的编译器。我改变了我的子程序的名字,现在工作正常!

janneb不错的想法使用派生类型的数组,而不是在Fortran中不允许使用的函数指针数组。

+0

肯定还有其他错误。没有理由为什么它应该使用一个名称而不使用另一个名称。 – eriktous 2012-01-05 12:45:39

+0

我得到的错误是与DO_CALC名称是:错误#5082:语法错误,发现'DO'当期待以下之一:)类型复杂字节字符双DOUBLECOMPLEX DOUBLEPRECISION INTEGER LOGICAL ...错误#8169:指定的接口不是声明。 [_CALC] – helios21 2012-01-05 21:24:44

+2

@ helios21:听起来像解析器中的错误,请将其报告给编译器供应商。 – janneb 2012-01-05 21:36:30