编辑:这已被标记为关于使用数组元素迭代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循环迭代中使用派生类型成员是不合法的吗?这是我能想到的全部,但我已经搜索过,无法找到相应的规则。