Oop 如何使用继承的组件';s整数值作为扩展中的数组长度
这就是我想做的:Oop 如何使用继承的组件';s整数值作为扩展中的数组长度,oop,fortran,type-extension,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的大小信息。
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
类型,但我认为它已经被继承了。(证明:如果我在datafilled
中再次定义n
,gfortran会抱怨重复。)我如何才能让它工作
注意:我声明n
可根据和分配,因为gfortran显然还不支持Fortran2003的len
属性
编辑:好的,我承认我可以在以后的每个初始化步骤中使用
allocatable
属性和allocate
进行操作。对于组件数组规范中可以包含的内容有一些限制,对于不可分配/非指针组件,允许在编译时对规范进行评估(在遇到所定义类型的对象的类型声明时)。具体而言,规范中的绑定值不得依赖于变量值-有关详细信息,请参阅F2008中的C446
dataframe类型的某些对象中的组件n
是一个变量;计算sum(n)
需要它的值;您违反了约束
长度类型参数,即使编译器支持,也只能是标量
正如您所总结的,使用一个可分配组件,并在某种构造过程中正确地分配东西是一条路。一开始,我很惊讶的发现,如果
n
是一个变量intent(in),那么声明double precision,dimension(sum(n),d)::x
在过程中起作用
。所以我很希望这也能在类型声明中起作用。到目前为止。