2015-12-21 55 views
2

我想使用參數聲明初始化派生類型。當我編譯時,出現以下錯誤定義派生類型數組

(1)處的INTEGER(4)數組構造函數中的元素爲CHARACTER(1)。

用戶定義的類型的值ipdpfasst_global中找到。它們是:

integer,parameter:: ip = selected_int_kind(8) 
integer,parameter:: dp = selected_real_kind(15,307) 

我一直在使用1_ip代替1作爲第一個元素嘗試,它並沒有區別。我究竟做錯了什麼?

module fasst_derived_types 
    use fasst_global 

    implicit none 

    type fasst_default_soil 
    integer(ip):: sid 
    character(len=2):: ssname 
    real(dp):: dens,pors,ssemis,ssalb,shc,smin,smax,salpha,svgn 
    real(dp):: sspheat,sorgan,spsand,spsilt,spclay,spgravel 
    end type fasst_default_soil 

    type(fasst_default_soil),parameter:: fasst_soil(1) = fasst_default_soil(& 

    (/1, 'GW',1.947_dp,0.293_dp, 0.92_dp,0.40_dp,1.1197e-2_dp,  & 
      0.01_dp,0.293_dp,22.6125_dp, 3.45_dp, 820.0_dp,  & 
       0.0_dp, 5.0_dp, 2.0_dp, 2.0_dp,91.0_dp/)) 

end module fasst_derived_types 

回答

1

您要使用此兩個構造函數:

  • 數組構造;
  • 結構構造函數。

你有正確的語法,但是你錯誤地使用它們。

數組構造函數(/.../)是構造一個數組。但是,您需要一組派生類型值(以及一個值)而不是數組作爲單個派生類型值的組件。語法錯誤來自嘗試創建具有各種不同/不兼容類型的數組。

所以,相反你要

type(fasst_default_soil),parameter:: fasst_soil(1) = (/fasst_default_soil(1_ip,'GW', ...)/) 

或者,你只是想要一個單一元素的數組,你甚至都不需要構建派生類型的數組。

+0

該數組實際上是大小30,但我減少到維度1進行調試。我現在擁有它,謝謝你的幫助。 – user2417662

+0

@ user2417662您不必在評論中表示感謝,但您應該標記幫助您接受的答案。 –