2012-04-18 84 views
0

我試圖用Fortran使用多態,但我有分配型的問題。我無法弄清楚如何使這項工作。英特爾編譯器拋出這個錯誤:在Polymoprhic分配類型變量的Fortran

error #6460: This is not a field name that is defined in the encompassing structure. 
analitic%param%a0=2 
---------------^ 

下面是一個小例子:

program new 

implicit none 

integer, parameter :: dp = kind(1.0d0) 

type :: potential 
    class(*),allocatable      :: param 
endtype 

type(potential)   :: analitic 
type :: pa1d_param 
    real(dp)  :: a0 
    real(dp)  :: b0 
end type 

allocate(pa1d_param::analitic%param) 

analitic%param%a0=2.0_dp  

end program 

這裏有什麼問題?

謝謝!

回答

2

通過聲明paramclass(*),您聲明無限多態對象。這些不能以正常的方式被引用 - 它們只能用作指針賦值實際參數,指針或目標,或在select type語句選擇(16.3.1與Fortran 95/2003解釋,梅特卡夫和Reid)。

爲了做到這一點,你意,你將不得不宣佈param是這樣的:(編譯併產生正確的輸出與ifort 12.0.2.137)

program new 

implicit none 

integer, parameter :: dp = kind(1.0d0) 

type pa1d_param 
    real(dp) :: a0 
    real(dp) :: b0 
end type pa1d_param 

type :: potential 
    class(pa1d_param),allocatable :: param 
endtype 

type(potential)   :: analitic 

allocate(analitic%param) 

analitic%param%a0 = 2.0_dp 

write(*,*)analitic%param%a0 

end program