gfortran:带有数组组件的多态数组

时间:2013-11-01 22:01:10

标签: polymorphism gfortran

以下

 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',产生正确的结果。 上面代码中的任何非标准内容或只是编译器错误?

0 个答案:

没有答案