如何为参数化派生类型编写类型绑定过程?附报错示例
参数化派生类型的类型绑定过程正确写法
你遇到的编译错误,根源在于参数化派生类型的多态对象声明不完整:当绑定过程的虚参是多态类型(用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
相关产品推荐
相关产品推荐

