2012-01-04 51 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