Я изучаю Фортран и хочу инкапсулировать массив и подпрограмму в тип. Проблема, по-видимому, заключается в определении типа самообъекта.
Это минимальный тестовый пример, который я придумал:
module testing
implicit none
type test(para)
integer, len :: para
real, dimension(para) :: weights
contains
procedure :: testing => testing_test
end type
contains
subroutine testing_test(self)
class(test(*)) :: self
end subroutine
end module
Компиляция этого с помощью gfortran вызывает эту ошибку:
module_test.f08:9:23:
procedure :: testing => testing_test
1
Error: Argument ‘self’ of ‘testing_test’ with PASS(self) at (1) must be of the derived-type ‘test’
Он работает, когда длина массива фиксирована (поэтому type%para
не существует)
То, что я пытаюсь сделать (тип с массивом переменного размера и связанной процедурой), просто невозможно, или я что-то упустил в отношении определения фиктивного аргумента?
gfortran --version
:GNU Fortran (GCC) 8.1.1 20180712 (Red Hat 8.1.1-5)
- person GammaSQ   schedule 06.10.2018