定义派生类型数组

Posted

技术标签:

【中文标题】定义派生类型数组【英文标题】:Define derived type array 【发布时间】:2016-03-27 22:30:21 【问题描述】:

我正在尝试使用参数声明来初始化派生类型。编译时出现以下错误

INTEGER(4) 数组构造函数中 (1) 处的元素是 CHARACTER(1)。

用户定义的种类值ipdp 位于fasst_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', ...)/)

或者,由于您只需要一个元素数组,您甚至不需要构造该派生类型数组。

【讨论】:

数组实际上大小为 30,但我减少到维度 1 进行调试。我现在有了,谢谢你的帮助。 @user2417662 您不必在 cmets 中感谢,但您应该将帮助您的答案标记为已接受。

以上是关于定义派生类型数组的主要内容,如果未能解决你的问题,请参考以下文章

定义派生类型数组

为派生数据类型的数组定义默认值

定义派生类型数组

C++ 类型将基础对象转换为派生对象

C++ 容器与继承

派生类型的自动静态调用