【发布时间】:2021-05-10 16:47:40
【问题描述】:
我想在派生类型中分配一个指针,该派生类型包含在同一派生类型中。下面的代码给了我下面的错误。这是怎么回事,我该如何解决?
24 | zoos(i)%tigers(1) => zoos(i)%animals(1, 1)
| 1
Error: Expected bounds specification for 'zoos' at (1)
module mo_zoo
implicit none
type zoo
integer, dimension(:,:), pointer :: animals
integer, dimension(:), pointer :: tigers
integer, dimension(:), pointer :: ducks
end type zoo
save
type(zoo), dimension(:), pointer :: zoos
end module mo_zoo
program test
use mo_zoo
implicit none
integer :: n_zoos
integer :: i
n_zoos = 4
allocate(zoos(n_zoos))
do i = 1, n_zoos
allocate(zoos(i)%animals(10, 2))
zoos(i)%tigers(1) => zoos(i)%animals(1, 1)
zoos(i)%ducks(1) => zoos(i)%animals(1, 2)
end do
end program test
【问题讨论】:
-
我认为我的情况更复杂,因为指针包含在派生类型的数组中。
-
fortran 中指针的第一条规则:不要使用指针。 Allocatables 几乎总是优越的 - 当然二维数组没有理由在这里显示不可分配,可能与 target 属性取决于你做什么
-
但是我很难理解你的数组的维度。为什么动物是二维数组,而老虎和鸭子是一维数组?当你做指针赋值时,你只指向一个元素,那为什么是一维数组呢?
-
我想指向数组中的一个范围。对不起,我的 Fortran 生锈了,这是我很久以来的第一次编码。
标签: fortran