Полиморфизм Фортрана в указателях
Я пытаюсь использовать указатели для создания ссылок между объектами. Использование Fortran и вот фрагмент кода:
module base_pars_module
type,abstract,public :: base_pars
end type
end module
module test_parameters_module
use base_pars_module
type, extends(base_pars) :: test_pars
contains
procedure :: whoami
end type
contains
function whoami(this) result(iostat)
class( test_pars) :: this
write(*,*) 'i am a derived type child of base_pars'
end type
end module
module base_mask_module
use base_pars module
type, abstract , public :: base_mask
class(base_pars),pointer :: parameters
end type
end module
module test_mask_module
use base_mask_module
implicit none
type, extends(base_mask) :: test_mask
end type
end module
program driver
type(test_pars) , target :: par_Test
type(test_mask) :: mask_test
iostat= par_test%whoami()
mask_test%parameters=>par_test
iostat=mask_test%parameters%whoami()
end program
parameters
вbase_mask_module
указатель сbase_pars
учебный класс. Я хотел бы использовать этот указатель для ссылкиpar_test
объект, который являетсяtest_pars
тип, который расширяетbase_pars
тип. Таким образом, указатель и цель имеют один и тот же класс. Но когда я компилирую это, выдает ошибку:
driver.f90:17.37:
iostat=mask_test%parameters%whoami()
1
Error: 'whoami' at (1) is not a member of the 'base_pars' structure
Это ошибка или я делаю что-то не так?