我正在尝试使用泛型类型绑定运算符 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.
答案 0 :(得分:2)
插入行
procedure :: vector_add
进入类型定义的contains
部分。正如@IanH在他的评论中所解释的那样
通用绑定解析为特定绑定(类似于如何绑定) 通用程序解决特定程序)。如果你没有 你建议插入的行,然后没有具体 绑定(在通用语句中列出特定绑定不会 定义特定绑定 - 您需要一个显式的单独类型绑定 程序陈述这样做)。订购并不重要。
为了便于阅读,我提出了他的解释,并使这个答案比我现在基于巫术的解释更好。