2012-04-18 85 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