История изменений
Исправление snake266, (текущая версия) :
Я немного поменял:
module two_d
use utility
implicit none
type map
real, dimension(:), allocatable :: xs, hs
end type map
contains
function get_map() result(m)
implicit none
type(map) :: m
integer :: N, i
character(len=10) :: file_name
file_name = 'field2.txt'
N = get_num_rows(file_name)
allocate(m%xs(N))
allocate(m%hs(N))
open(unit = 1, file = file_name, status = 'old')
do i = 1, N
read (1, *) m%xs(i), m%hs(i)
end do
close(1)
return
end function get_map
end module
Если убрать dimension, то он начинает ругаться. Он правда и сейчас ругается на вызов и я еще разбираюсь почему:
gfortran -Wall -Wpedantic -Wextra utility.f90 two_d.f90 main.f90
main.f90:4:20:
4 | print *, get_map()
| 1
Error: Data transfer element at (1) cannot have ALLOCATABLE components unless it is processed by a defined input/output procedure
У тебя кстати вся функция как-то неправильно оформлена
Примеры смотрю тут http://www.mathcs.emory.edu/~cheung/Courses/561/Syllabus/6-Fortran/
И вообще это не функция, а процедура, похоже.
Возможно, я еще разбираюсь чем оно отличается. В Raku они отличаются тем, что function умеет возвращать значение, а subroutine - нет
Исходная версия snake266, :
Я немного поменял:
module two_d
use utility
implicit none
type map
real, dimension(:), allocatable :: xs, hs
end type map
contains
function get_map() result(m)
implicit none
type(map) :: m
integer :: N, i
character(len=10) :: file_name
file_name = 'field2.txt'
N = get_num_rows(file_name)
allocate(m%xs(N))
allocate(m%hs(N))
open(unit = 1, file = file_name, status = 'old')
do i = 1, N
read (1, *) m%xs(i), m%hs(i)
end do
close(1)
return
end function get_map
end module
Если убрать dimension, то он начинает ругаться. Он правда и сейчас ругается на вызов и я еще разбираюсь почему:
gfortran -Wall -Wpedantic -Wextra utility.f90 two_d.f90 main.f90
main.f90:4:20:
4 | print *, get_map()
| 1
Error: Data transfer element at (1) cannot have ALLOCATABLE components unless it is processed by a defined input/output procedure
У тебя кстати вся функция как-то неправильно оформлена
Примеры смотрю тут http://www.mathcs.emory.edu/~cheung/Courses/561/Syllabus/6-Fortran/
И вообще это не функция, а процедура, похоже.
Почему? Она возвращает значение поэтому функция.