两个指针具有相同的派生类型

时间:2017-02-06 15:32:53

标签: pointers types fortran derived

我试图在同一个模块中创建两个不同的派生类型,但它不起作用(试图将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

请让我知道我做错了什么。

0 个答案:

没有答案