我有以下代码,其中包含抽象类型、继承类型和短程序,我在其中创建一个对象并将其存储在一个数组中。
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
可以看出,存储在数组中的相同变量使第二个变量无效。为什么会这样?是因为数组是 type a
,它只包含第一个变量吗?
我正在用ifort version 18.0.3
.