为以下功能创建了一个界面
Interface numd
Module Procedure :: numcl_int8, numcl_int16
Module Procedure :: numcl_int32, numcl_int64
Module Procedure :: numcl_real32, numcl_real64
Module Procedure :: numcl_real128
End Interface numd
输出为Int8的函数定义如下, Int16,Int32,Int64,Real32,Real64,Real128。
Function numcl_int8 (t, mold) Result (b)
Integer (Int8) :: b
Class (*), Intent (In) :: t
Integer (Int8), Intent (InOut) :: mold
End Function numcl_int8
我收到错误
There is no specific function for the generic 'numd' at (1)
在以下子程序中调用numd
Subroutine opscanc (ct)
Class (*), Intent (Out) :: ct
ct = numd (5, mold=ct)
End Subroutine opscanc
我该如何解决这个问题?
答案 0 :(得分:2)
mold=ct
子例程中对numd
的调用中的第二个实际参数(opscanc
)具有无限多态的声明类型。根据您的特定过程的接口示例,泛型接口中的任何特定过程都没有第二个伪参数的类型为无限多态。
无限多态实际参数与具有某种声明类型的伪参数不兼容,因此没有匹配的特定过程可供调用。
(比较的方向在这里很重要 - 一个具有一些声明类型的实际参数与一个无限多态的伪参数兼容 - 因此默认的整数文字常量5
可以与第一个虚拟参数相关联无限多态的论证。)
您需要提供这样一个匹配的特定过程,或者在opscanc
中使用SELECT TYPE构造来访问由ct
通过其动态类型(或父类型)的声明类型指定的对象动态类型的类型)。