Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 如何使用继承的组件';s整数值作为扩展中的数组长度_Oop_Fortran_Type Extension - Fatal编程技术网

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
在过程中起作用
。所以我很希望这也能在类型声明中起作用。到目前为止。