如何使用Gfortran解决两个多态组件之间内在赋值为类型变量的问题?
Gfortran 8.1和9.1给出了一个关于将两个多态组件内在赋值为类型变量的错误。我在使用英特尔编译器时没有任何问题,但在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_
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]标记。标记在这里非常重要,可以确保人们能够真正看到您的问题。您应该始终将准确的错误复制给我永远不要只描述信息的内容。