使用派生类型成员作为do循环迭代变量

时间:2018-04-18 19:17:25

标签: fortran gfortran derived-types

编辑:这已被标记为关于使用数组元素迭代do循环的问题的副本。一个类似的问题可以肯定,但是您可以阅读答案,而不会看到有关使用派生类型的非数组成员的任何信息。尽管逻辑可能是相同的,但对于那些尚未意识到相同逻辑适用的人来说,完全没有说明。所以我认为这是一个截然不同的问题。

此代码不会在gfortran(版本5.2.0)下编译。编译器返回一个"无法分类的语句"错误标记:

module stuff

type foo
  integer :: bar
  contains
  procedure :: iterator
end type foo

contains

subroutine iterator(stuff_inst)

class(foo) :: stuff_inst
integer :: local_bar

do stuff_inst%bar=1,10      ! <--- error
  print *, stuff_inst%bar
enddo

end subroutine

end module stuff

此代码编译得很好,并且通过驱动程序也可以正常运行:

module stuff

type foo
  integer :: bar
  contains
  procedure :: iterator
end type foo

contains

subroutine iterator(stuff_inst)

class(foo) :: stuff_inst
integer :: local_bar

do local_bar=1,10                ! <--- no error
  stuff_inst%bar = local_bar     ! <--- no error
  print *, stuff_inst%bar
enddo

end subroutine

end module stuff

有人可以告诉我具体问题吗?在do循环迭代中使用派生类型成员是不合法的吗?这是我能想到的全部,但我已经搜索过,无法找到相应的规则。

0 个答案:

没有答案