这就是我想要做的事情:
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
来执行此操作。
答案 0 :(得分:1)
对于组件数组规范中的内容存在约束,对于不可分配/非指针组件,允许在编译时评估规范(在该类型的对象的类型声明处,定义是遇到的)。具体而言,规范中的边界值不得取决于变量的值 - 有关详细信息,请参阅F2008中的C446。
dataframe类型的某个对象中的组件n
是一个变量;计算sum(n)
需要它的价值;你违反了约束条件。
长度类型参数,即使您的编译器支持它们,也只能是标量。
正如您所总结的那样 - 使用可分配的组件,并在某种构造过程中正确分配事物是可行的方法。