2014-04-09 107 views
1

我試圖定義一個具有私有可分配數組的Fortran派生類型。但是,我希望能夠通過公共指針訪問數組以供其他模塊使用。例如。Fortran派生類型 - 指向私有數組的公共指針

type,public :: test 
private 
real,allocatable :: a(:,:,:) 
contains 
real,pointer,dimension(:,:,:),public :: point => a 
end type test 

我只是在嘗試像上面那樣得到一個編譯器錯誤。

這可能沒有寫一個子程序,爲我做指點?

回答

1

的語法錯誤可能是因爲你必須在類型定義的類型綁定過程的一部分的指針分量(包含後),而不是在組件部分(包含前)。

除了語法,但仍有一些問題,你想要做什麼:

  • 不能在終場前一類型定義的組件相關聯。指針可以與對象的組件(子對象)相關聯。同樣,你不能將一個指針與沒有target屬性的東西關聯起來。類型和類型的組件不能具有目標屬性。該類型的變量或對象的指針組件指向的對象可能具有目標屬性。

  • 您不能將指針與未分配的東西關聯起來。如果某些東西沒有被分配,那麼就沒有任何東西可以指向。

  • 指針組件的初始化程序無法引用可分配的內容。除了目標屬性之外,它所引用的內容必須具有SAVE屬性。與TARGET屬性一樣,變量具有save屬性,而不是類型或組件定義。

  • 將指針與對象的組件關聯可能會使首先將組件隱藏起來。這導致了一個問題 - 你想要做什麼?

+0

綜合答案,謝謝。我有一些使用派生類型數組作爲私有的Fortran代碼,並具有與指向專用數組的類型關聯的「點」函數。但是我試圖在程序的其他部分使用OpenACC指令,並且它們不能用指針子程序工作,所以我試圖找到解決辦法。我將嘗試將指針保留爲空,並在數組分配後指向它,再次感謝您的回答! – HM13

+0

您可以將它設置爲指向類型構造函數中的正確位置。 –

+0

爲了清楚起見... Fortran中的結構構造函數看起來像函數(在沒有任何類型參數說明的情況下)。用戶提供的「構造函數」遵循該模式並作爲函數實現(可能隱藏真實的結構構造函數)實際上不能用於指示將一個組件與另一個組件關聯 - 該指針與一些將在不久之後不再存在的事件相關聯該函數返回。您必須使用子例程來構造。請注意指針的關聯狀態隨後可能變得未定義的各種方式。 – IanH