You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为参数化派生类型编写类型绑定过程?附报错示例

参数化派生类型的类型绑定过程正确写法

你遇到的编译错误,根源在于参数化派生类型的多态对象声明不完整:当绑定过程的虚参是多态类型(用class声明)时,必须明确参数化类型的参数信息,要么指定具体参数值,要么用(*)表示匹配任意参数值。

修正后的代码

module parameters

type :: sinx (kind)
    integer, kind :: kind=4
    real(kind) :: x

contains
   procedure, pass(this) :: proc
end type sinx

contains
subroutine proc (this)
    class(sinx(*)), intent(in) :: this  ! 关键修改:添加(*)匹配任意类型参数
    write (*,*) this%x
end subroutine proc

end module parameters

program test
use parameters
type(sinx(4)) :: sinus
sinus%x = 1.0_4
call sinus%proc()  ! 调用类型绑定过程
end program test

关键说明

  • 将虚参声明从class(sinx)改为class(sinx(*)),(*)表示该多态对象可以匹配任意类型参数值的sinx派生类型,编译器就能正确识别this属于sinx参数化类型,满足PASS(this)的要求。
  • 如果你的过程只需要处理特定类型参数的对象,也可以显式指定参数,比如class(sinx(kind=8)),但这种写法灵活性较差,通常推荐用(*)来适配所有参数化情况。

内容的提问来源于stack exchange,提问作者Stanislav Fyodorov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 03:13:12