2013-06-26 119 views
0

這就是我想做的事:如何使用的繼承組件的整數值數組長度延伸

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可以根據this question進行分配,因爲gfortran顯然還不支持Fortran2003的len屬性。

編輯:好的,我承認我可以在allocatable屬性和allocate在以後的每個初始化步驟。

回答

1

對於組件數組規範中的內容有約束,對於不可分配/非指針組件允許在編譯時計算規範(在類型對象的類型聲明正在被定義遇到)。具體而言,規範中的邊界值不能取決於變量的值 - 有關詳細信息,請參閱F2008中的C446。

組件n在dataframe類型的某些對象中是一個變量;計算sum(n)需要其值;你違反了約束。

即使您的編譯器支持它們,長度類型參數也只能是標量。正如你已經總結的那樣 - 使用可分配的組件,並在某種構建過程中正確地分配內容是一種可行的方法。

+0

在開始時,如果'n'是一個變量'intent(in)',我很驚訝聲明'double precision,dimension(sum(n),d):: x'在一個過程中工作。所以我非常希望這可以在類型聲明中起作用。到現在。 –