У меня есть следующий код с абстрактным типом, унаследованным типом и короткой программой, где я создаю объект и сохраняю его в массиве.
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
.
container
послеa
). Это потому, что gfortran 8 еще не поддерживает порядок в вопросе? - person francescalus   schedule 08.06.2018