以下
type t
real :: r(2)
end type t
class(t), allocatable :: array(:)
allocate(array(1))
array(1)%r(1) = 1
array(1)%r(2) = 2
print*,array(1)%r
end program
打印错误
1.00000000 0.00000000
使用gfortran-4.8.1。无论数组大小如何,我都只能正确设置第一个元素。所有其他作业均无效。没有给出警告。这是编译器错误吗?使用英特尔编译器,它可以正确打印
1.000000 2.000000
修改
很抱歉,上面的内容虽然可能是编译器错误,却是对我实际问题的过度简化。实际上我有一个可分配的数组,其元素继承自抽象类型。
module m
type, abstract :: base
real, allocatable :: r(:)
contains
procedure :: print
end type base
type, extends(base) :: t
end type t
contains
subroutine print(this, n)
class(base) :: this
integer n
print*,this%r(n)
end subroutine print
end module m
program test
use m
class(base), allocatable :: array(:)
type(t) :: f
allocate(array(1), mold=f)
allocate(array(1)%r(2))
array(1)%r(1) = 1.0
array(1)%r(2) = 2.0
call array(1)%print(1)
call array(1)%print(2)
end program test
结果是
1.00000000
0.00000000
与gfortran,但应该是
1.00000000
2.00000000
和ifort一样。使用基础绑定集函数,而不是直接定义'r',产生正确的结果。 上面代码中的任何非标准内容或只是编译器错误?