2012-03-12 56 views
2

我在FORTRAN中編寫了一個相當小的pde-solving應用程序,我試圖使用OOP。現在,我有幾個模塊,其中一些模塊定義了具有相應內部過程的類型。在Fortran中的不同模塊中定義的連接類型

現在的問題是,如果一個模塊與另一個模塊後來的模式也與前者的工作類型中定義的類型工作的我該怎麼辦?我舉一個例子。

說,我有兩個模塊,一個限定類型網格,另一種類型NodeVariable。現在我想讓每個NodeVariable與它將要解決的網格相關聯,所以我在該類型的定義中添加了一個type(Mesh) :: mesh字段。到目前爲止,這是沒有問題,我可以寫use module-mesh獲得訪問類型網格的定義。但我也希望網格知道在其上定義的變量,因此我將type(NodeVariable), allocatable :: var(:)聲明爲一個字段,並添加一個過程以將變量添加到網格中。但現在我堅持,因爲我買不起另一使用聲明:它使模塊使用本身,因此一切都崩潰。解?

+1

您可能需要在一個公共模塊中創建所有'TYPE()'定義,並將這些功能移至單獨的輔助模塊。這離開了OOP,但我們仍然在這裏談論Fortran,請記住。如果你試圖強制太多的面向對象範例,你將束縛在結中! – ja72 2012-03-12 06:07:15

+0

在相似的情況下,子模塊可能也很方便,但它們還沒有得到廣泛的支持,所以我不太瞭解它們。 – 2012-03-12 10:17:05

+0

是的,我想我會爲這個定義有一個特殊的模塊! – tiam 2012-03-13 11:27:00

回答

0

考慮你的模塊通過使用語句連接成一個圖。正如你所發現的那樣,Fortran禁止在這個圖表中顯示週期。解決方案是重新設計圖形以避免週期。

你的情況,你可以簡單地在同一模塊中定義了兩種類型。

+0

是的,我猜這是唯一可能的答案。謝謝。 – tiam 2012-03-13 11:26:30

相關問題