у меня есть класс
!> Class representing a general network
type :: net_t
private
character(:), allocatable :: net_type !< Type of the net
integer(kind=integer_4neuro) :: num_of_neurons !< Number of neurons in the net
character(:), allocatable :: training_method !< Used training method
class(neuron_t), allocatable :: neuron_arr(:) !< Array containing all neurons
integer(kind=integer_4neuro), allocatable :: input_neuron_arr(:) !< Array of input neuron indices
integer(kind=integer_4neuro), allocatable :: output_neuron_arr(:) !< Array of output neuron indices
! class(connection_t), выделяемый :: connection_arr(:) !‹ Массив всех соединений
contains
!> Prints information about the network to the standard output.
procedure :: print_info => print_info_impl
!> Saves the network instance to the Fortran binary file
procedure :: save_net_bin => save_net_bin_impl
end type net_t
Он содержит несколько массивов (размещаемых переменных), которые размещаются в конструкторах (модульных процедурах).
Мне нужно сохранить класс или его свойства, по крайней мере, в бинарный файл. Я попытался сделать это, реализовав метод сохранения:
!> Saves the network instance to the Fortran binary file
subroutine save_net_bin_impl(this, filename)
type(net_t), intent(in) :: this !< Instance of the class 'net_t'
character(len=*), intent(in) :: filename !< Name of the file, where the net will be saved into
open(unit=11, file=filename, form="unformatted", access='stream', position='append')
write(11) this
close(unit=11)
end subroutine save_net_bin_impl
Но я получаю следующую ошибку:
procedure :: save_net_bin => save_net_bin_impl
1
Error: Non-polymorphic passed-object dummy argument of ‘save_net_bin_impl’ at (1)
Я понимаю, что причиной моей проблемы являются выделяемые переменные, но я понятия не имею, как правильно решить эту проблему. Не могли бы вы помочь мне с сохранением этого класса? write(11) this 1 Error: Элемент передачи данных в (1) не может иметь ALLOCATABLE компоненты, если он не обрабатывается определенной процедурой ввода/вывода
read(11) new_obj
1
Error: Data transfer element at (1) cannot have ALLOCATABLE components unless it is processed by a defined input/output procedure
MPI_BCAST
. - person Ross   schedule 04.06.2018