我有一个下面的代码,有一个抽象类型,继承类型和一个简短的程序,在那里我创建了一个对象并将其存储在一个数组中。
module m
implicit none
type :: container
class(a), allocatable :: item
end type container
type, abstract :: a
integer, public :: num
end type a
type, extends(a) :: b
integer, public :: num2
end type b
end module m
program mwe
use m
implicit none
class(a), allocatable :: o1
class(container), allocatable :: arr(:)
o1 = b(1, 2)
allocate(arr(2))
arr(1) = container(o1)
select type(t => o1)
type is(b)
write(*,*) t%num, t%num2
end select
select type(t => arr(1)%item)
type is(b)
write(*,*) t%num, t%num2
end select
end program mwe
问题是,输出如下所示:
1 2
1 0
可以看出,存储在数组中的同一变量将第二个变量置为空。为什么会发生这种情况?是因为数组的类型是a
,它只包含第一个变量吗?
我正在用ifort version 18.0.3
编译代码。
https://stackoverflow.com/questions/50756696
复制相似问题