Я пытаюсь написать небольшой модуль, который создает производный тип vector
, однако при компиляции с помощью gcc10.1 я получаю сообщение об ошибке
overload1.f95:10:14:
10 | procedure :: ciao
| 1
Error: Argument â of â with PASS(sh) at (1) must be of the derived-type â
overload1.f95:30:5:
Поискав в Интернете, я не нашел явного примера использования параметризованных типов в процедуре привязки типов. Кто-нибудь знает, где ошибка? (под небольшим кодом)
module mat
implicit none
type vector(k, ndim)
integer, kind :: k=KIND(4)
integer, len :: ndim
real(kind = k), dimension(ndim) :: v
contains
procedure :: ciao
end type vector
contains
subroutine ciao(sh,a)
class (vector(KIND(4),ndim)) :: sh
real(kind=8) :: a
a = 1d0
end subroutine ciao
end module mat
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
use mat
type( vector(4,10) ) :: A
A%v(1) = 1d0
A%V(2) = 2d0
A%v(3) = 3d0
write(*,*) A
end program
KIND(4)
весьма своеобразно. Вы действительно хотите получить тип целого числа по умолчанию? В этом случае я бы использовалKIND(1)
, чтобы было меньше путаницы. Кроме того, имейте в виду, чтоkind=8
уродлив, не переносим и может быть несовместим с1d0
. - person Vladimir F   schedule 09.06.2020class (vector(KIND(4),ndim)) :: sh
(вы не объявилиndim
, и вместо этого вам нужно, чтобы параметр длины предполагался*
), но я подозреваю, что вы столкнулись с проблемой в этот другой вопрос. - person francescalus   schedule 09.06.2020