如何在扩展中使用继承组件的整数值作为数组长度

时间:2013-06-26 19:02:11

标签: oop fortran type-extension

这就是我想要做的事情:

  type dataframe
     integer::a,d
     integer,dimension(:),allocatable::n
  end type dataframe

  type,extends(dataframe):: datafilled
     double precision,dimension(sum(n),d)::x
  end type datafilled

因此dataframe应该能够存储其子datafilled的大小信息。 gfortran想知道编译的n类型,但在我看来它已经被继承了。 (证明:如果我再次在n中定义datafilled,gfortran会抱怨重复。)我怎样才能让它工作?

注意:我声明n可以根据this question进行分配,因为gfortran显然还不支持Fortran2003的len属性。

编辑:好的,我承认我可以在稍后的每个初始化步骤中使用allocatable属性和allocate来执行此操作。

1 个答案:

答案 0 :(得分:1)

对于组件数组规范中的内容存在约束,对于不可分配/非指针组件,允许在编译时评估规范(在该类型的对象的类型声明处,定义是遇到的)。具体而言,规范中的边界值不得取决于变量的值 - 有关详细信息,请参阅F2008中的C446。

dataframe类型的某个对象中的组件n是一个变量;计算sum(n)需要它的价值;你违反了约束条件。

长度类型参数,即使您的编译器支持它们,也只能是标量。

正如您所总结的那样 - 使用可分配的组件,并在某种构造过程中正确分配事物是可行的方法。