gfortran 4.9通用类型绑定运算符

时间:2014-11-03 05:03:36

标签: oop fortran operators

我正在尝试使用泛型类型绑定运算符 gfortran 4.9,但我得到错误。我尝试过使用Type(Vector) 和类(矢量)没有成功。

Type :: Vector

  Real :: x, y, z

Contains

  Procedure :: set => vector_set
  Procedure :: write => vector_write
  generic :: Operator (+) => vector_add

End Type Vector


Function vector_add  &
(                    &
  u, v               &
)                    &
  Result (w)

  !!$ Input
  Type (Vector), Intent(in) :: u, v

  !!$ Output
  Type (Vector) :: w

  w% x = u% x + v% x
  w% y = u% y + v% y
  w% z = u% z + v% z

End Function vector_add

我收到以下错误:

gfortran -o build/lib/foul.o -c -ffree-form -g -J./build/lib lib/foul.f
gfortran -o build/lib/vectors.o -c -ffree-form -g -J./build/lib lib/vectors.f
lib/vectors.f:194.28:

generic :: Operator (+) => vector_add
                        1
Error: Undefined specific binding 'vector_add' as target of GENERIC '+' at (1)
scons: *** [build/lib/vectors.o] Error 1
scons: building terminated because of errors.

1 个答案:

答案 0 :(得分:2)

插入行

procedure :: vector_add

进入类型定义的contains部分。正如@IanH在他的评论中所解释的那样

  

通用绑定解析为特定绑定(类似于如何绑定)   通用程序解决特定程序)。如果你没有   你建议插入的行,然后没有具体   绑定(在通用语句中列出特定绑定不会   定义特定绑定 - 您需要一个显式的单独类型绑定   程序陈述这样做)。订购并不重要。

为了便于阅读,我提出了他的解释,并使这个答案比我现在基于巫术的解释更好。