在多调变量 Fortran 中分配类型



我正在尝试在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

这是怎么回事?

谢谢!

通过声明paramclass(*) ,你声明了一个无限的多态对象。这些不能以正常方式引用 - 它们只能用作指针赋值中的实际参数、指针或目标,或用作select type语句中的选择器(16.3.1,Fortran 95/2003 解释,Metcalf 和 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

最新更新