没有针对通用

时间:2016-05-20 01:56:56

标签: generics fortran

为以下功能创建了一个界面

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

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

mold=ct子例程中对numd的调用中的第二个实际参数(opscanc)具有无限多态的声明类型。根据您的特定过程的接口示例,泛型接口中的任何特定过程都没有第二个伪参数的类型为无限多态。

无限多态实际参数与具有某种声明类型的伪参数不兼容,因此没有匹配的特定过程可供调用。

(比较的方向在这里很重要 - 一个具有一些声明类型的实际参数与一个无限多态的伪参数兼容 - 因此默认的整数文字常量5可以与第一个虚拟参数相关联无限多态的论证。)

您需要提供这样一个匹配的特定过程,或者在opscanc中使用SELECT TYPE构造来访问由ct通过其动态类型(或父类型)的声明类型指定的对象动态类型的类型)。