可能重复:
Function pointer arrays in Fortran
How to alias a function name in 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 :(得分:3)
Fortran中的函数指针称为“过程指针”,是Fortran 2003标准的一部分。现在许多现代编译器都支持它们。还有一种非常有限的函数指针形式可以追溯到至少F77,在这里你可以有一个过程参数,这是一个过程;但是在F2003之前你不能有正常的函数指针变量。如果你在根据上述内容搜索某些内容后遇到问题,请发布你正在编写的一些代码,我相信有人会帮助你。
WRT。一个指针数组,由于某种原因不允许。常见的解决方法是使用指针组件创建派生类型,然后创建这些派生类型的数组。
答案 1 :(得分:3)
感谢您的回答。
问题最终是我的子程序名称是DO_CALC,并且出于某种原因声明
PROCEDURE (DO_CALC), POINTER :: pDO_CALC => NULL()
不喜欢编译器。我改变了我的子程序的名称,现在工作正常!
janneb很好的想法使用派生类型的数组而不是Fortran中不允许的函数指针数组。