Fortran 2003 中的内在赋值和多态性

jvr*_*sem 3 polymorphism fortran intel-fortran

我尝试向此模块添加一个由@VladimirF编写的过程,该过程在 Fortran 2003 中实现通用链表。为了方便起见,我希望能够将列表的内容作为数组输出,因此我将以下过程添加到列出名为的文件中的模块lists.f90

  subroutine list_as_array(self, arrayOut)
    class(list),intent(inout) :: self
    class(*),dimension(1:self%length),intent(out) :: arrayOut
    integer :: i
    type(list_node), pointer :: nodeIter
    nodeIter = self%first
    do i = 1,self%length
      arrayOut(i) = nodeIter%item  ! <---ERROR here
      if (i<self%length) then
        nodeIter = nodeIter%next
      end if
    end do
  end subroutine list_as_array
Run Code Online (Sandbox Code Playgroud)

ifort 18.0.0给出以下错误:

lists.f90(324): error #8304: In an intrinsic assignment statement, variable shall not be a non-allocatable polymorphic.   [ARRAYOUT]
      arrayOut(i) = nodeIter%item
------^
Run Code Online (Sandbox Code Playgroud)

我对 F2003+ 中的多态性不熟悉,所以我不理解错误消息或其上下文。出了什么问题,如何修复?

Ste*_*nel 5

错误消息的意思就是它所说的。Fortran 2008 标准描述了内部赋值语句,它说:“如果变量是多态的,那么它应该是可分配的而不是协同数组” arrayOut 是CLASS(*),这使得 in 是多态的。只能分配可分配的多态性。

至于“如何解决它”,这需要更多背景信息。