找不到Fortran用戶定義類型我寫了一些代碼在一個文件中像這樣當類型名重載作爲構造
module ModuleBasicGeometry4
...
type TPoint
...
end type TPoint
interface TPoint
module procedure :: TPointInit1,TPointInit2
end interface TPoint
contains
...
end module ModuleBasicGeometry4
在另一個文件中,我想用我的用戶自定義的派生類型TPoint。我只是用使用聲明:
...
use ModuleBasicGeomentry4
type(TPoint) :: ...
...
然而,當我編譯ifort2013_sp1.3.174這些文件,它告訴我,TPoint不是派生類型名稱,如果我在第一個文件刪除的接口聲明,一切都很好。由於它們具有相同的名稱,因此界面語句似乎會掩蓋類型語句。更奇怪的是,我還在同一個第一個文件中定義了許多其他派生類型和相應的接口作爲其構造函數,並且它們都工作正常。那麼是什麼導致了這個奇怪的問題?
P.S. 我想我找到了一些原因,但我不知道爲什麼。我說其他類型的工作是不正確的。在第二個文件,因爲我需要一些過程指針,我寫了這樣的事情
...
interface
... function ...
use MoudleBasicGeometry4
...
end function ...
end interface
...
我發現,只有那些該接口聲明之前使用的類型工作。只要第一個文件中定義的類型在該接口語句之後使用,ifort編譯器就會給出錯誤消息:「這不是派生類型名稱」。更重要的是,如果我在上面的接口語句中刪除了使用ModuleBasicGeometry4語句,那麼evetything也是可以的。有人可以解釋爲什麼,並告訴我如何解決這個問題?非常感謝。
我想你的建議和它在你的情況與ifort工作。不幸的是,這並不適用於我的情況。不同的是,我的第二個文件也是模糊的。當我用導入語句替換有問題的use語句以使用第一個文件中定義的派生類型時,導入語句本身似乎不會導致任何錯誤,但是當我使用導入類型聲明變量時,編譯器會告訴「此派生類型名字還沒有被宣佈。「但是,在相同的第二個文件中定義的類型可以正確導入和使用。 – waltergu 2014-10-27 10:32:06
如果沒有你的實際代碼,我不能告訴你更多的東西,但要編譯「-warn all」。 – credondo 2014-10-27 11:18:45
我不知道該說什麼......似乎突然一切正常,進口聲明。非常感謝你。 – waltergu 2014-10-27 15:22:13