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+ 中的多态性不熟悉,所以我不理解错误消息或其上下文。出了什么问题,如何修复?
错误消息的意思就是它所说的。Fortran 2008 标准描述了内部赋值语句,它说:“如果变量是多态的,那么它应该是可分配的而不是协同数组” arrayOut 是CLASS(*),这使得 in 是多态的。只能分配可分配的多态性。
至于“如何解决它”,这需要更多背景信息。