我试图在同一个模块中创建两个不同的派生类型,但它不起作用(试图将x和y指针作为不同的派生类型)。我转而使用此代码。这是一个通用的Fortran示例: (错误:程序崩溃)
module one
implicit none
type one
logical :: first_entry
integer :: value
integer, pointer :: next
end type one
type(one), dimension(:), pointer :: x
type(one), dimension(:), pointer :: y
end module one
module two
use one
implicit none
y(:)%first_entry = .true.
do k = 1, 10
if(y(k)%first_entry) then
...do things
y(k)%next => x(k)%value
end if
end do
end module two
以下是我尝试的原始代码示例。例如,我有10个盒子,我希望10个盒子中的每个盒子都有100个沙子。在每个方框中,我想要一个指向第一个沙子的指针,但是沙子应该在一个链表中相互链接。
module one
implicit none
type sand
integer :: id
integer, pointer :: next
end type sand
type box
logical :: first_entry
integer :: id
integer, pointer :: first
end type box
type(sand), dimension(:), pointer :: s
type(box), dimension(:), pointer :: b
end module one
module two
use one
implicit none
integer :: k
! Initialize
b%first_entry = .true.
! For each sand
do j = 1, 100
! for each 10 boxes, point to first sand by id and link all
! the sand%next to point to the next sand%id
do k = 1, 10
if(b(k)%first_entry) then
b(k)%first => s(j)%id
b(k)%first_entry = .false.
else
s(j)%next => s(j+1)%id
...some condition to detect end of list
end if
end do
end do
end module two
请让我知道我做错了什么。