如何使用Gfortran解决两个多态组件之间内在赋值为类型变量的问题?

如何使用Gfortran解决两个多态组件之间内在赋值为类型变量的问题?,fortran,gfortran,Fortran,Gfortran,Gfortran 8.1和9.1给出了一个关于将两个多态组件内在赋值为类型变量的错误。我在使用英特尔编译器时没有任何问题,但在gfortran中没有问题。我在问是否有人知道解决办法。 下面是一个您可以尝试编译的示例 Program Check implicit none !> Type definitions Type :: Atm_Type End Type Atm_Type Type, extends (Atm_type) :: Atm_Std_Type End Type Atm_

Gfortran 8.1和9.1给出了一个关于将两个多态组件内在赋值为类型变量的错误。我在使用英特尔编译器时没有任何问题,但在gfortran中没有问题。我在问是否有人知道解决办法。 下面是一个您可以尝试编译的示例

Program Check
implicit none

!> Type definitions
Type :: Atm_Type
End Type Atm_Type

Type, extends (Atm_type) :: Atm_Std_Type
End Type Atm_Std_Type

Type, extends (Atm_std_type) :: Atm_Ref_Type
End Type Atm_Ref_Type

Type :: AtList_Type
   integer                                    :: Natoms
   class(Atm_Type), dimension(:), allocatable :: Atom
end Type AtList_Type

!> Variables 
type(AtList_Type) :: list

call sub(list)

Contains

Subroutine Sub(List)
   !---- Argument ----!
   type (AtList_Type), intent(in out) :: List

   !---- Local Variables ----!
   integer            :: i
   type (AtList_Type), allocatable :: local

   if (List%natoms <= 0 ) return
   allocate(local%atom(List%natoms))

   do i=1, List%natoms
      local%atom(i)=list%atom(i)
   end do   

End Subroutine Sub

End Program Check
程序检查
隐式无
!> 类型定义
类型::Atm_类型
端型Atm\U型
类型,扩展(Atm\U类型)::Atm\U标准\U类型
端型Atm\U标准\U型
类型,扩展(Atm标准类型)::Atm参考类型
终端类型Atm\u Ref\u类型
类型::AtList_类型
整数::Natoms
类(Atm_类型),维度(:),可分配::原子
端类型AtList\U类型
!> 变量
类型(目录类型)::列表
呼叫子系统(列表)
包含
子例程Sub(列表)
!---- 论点--!
类型(AtList_类型),意图(输入输出)::列表
!---- 局部变量---!
整数::i
类型(AtList_类型),可分配::本地

如果(列表%natoms这里的解决方法非常简单,出现在其中一个中。只需复制整个数组

 local%atom = list%atom
然而,当您确实需要访问单个元素时,并不总是能够做到这一点


如果里面可能的类型数量有限,您也可以使用
select type
type-guard,但这通常也是不可能的。

欢迎,请对所有fortran问题使用tag-tag:fortran]标记。标记在这里非常重要,可以确保人们能够真正看到您的问题。您应该始终将准确的错误复制给我永远不要只描述信息的内容。