从this question开始,我尝试创建一个派生类型Result2D
,其中包含排名为2的数组data
作为属性,其中包含数据程序init()
:
type, public :: Result2D
class(*), allocatable :: data(:,:)
contains
procedure, public :: init
end type
contains
subroutine init(this, data)
class(Result2D) :: this,
class(*) :: data(:,:)
allocate(this%data, source=data)
end subroutine
但是,使用rank-2数组调用init会导致GFortran中的数组绑定不匹配错误,在allocate
语句的行上Array bound mismatch for dimension 1 of array '<<unknown>>' (4/2)
。我不明白为什么会发生这种情况,并且它适用于排名1阵列(但不适用于任何排名为2及以上的排名)。
调用init()
的代码示例:
type(Result2D) :: r
integer :: i(2,2)
i(1,:) = [1,2]
i(2,:) = [3,4]
call r%init(i)