派生型Vを作成しました。追加関数 を使用して、演算子+を使用できます。Fortran:関数の戻り値の型からの値へのアクセス
は、しかし、私は操作が実行されていない
z = u + v
を行うとき。 z%kn
にアクセスしていないためだと思います。
私は
Call vsum(z, u, v)
を行う場合は、以下の
期待通りしかしすべての作品は、派生型と のオーバーロード関数VADDの宣言です。
Module vtest
Type :: V
Character (Len=8) :: kn
Real, Allocatable :: vc(:)
Contains
Procedure :: vadd
Generic :: Operator (+) => vadd
End Type vtest
Contains
Function vadd (b, c) Result (a)
Type (V) :: a
Class (V), Intent (In) :: b, c
!!$ In vsum, use is made of a% kn
Call vsum (a, b, c)
End Function vadd
Subroutine vsum (ta, tb, tc)
Type (V), Intent (InOut) :: ta
Type (V), Intent (In) :: tb, tc
Logical :: la, lb, lc
la = .False.; lb = .False.; lc = .False.
Select Case (ta%kn)
Case ("Real32")
If (Allocated (ta%vc)) la = .True.
If (Allocated (tb%vc)) lb = .True.
If (Allocated (tc%vc)) lc = .True.
If (la .And. lb .And. lc) Then
ta%vc = tb%vc + tc%vc
End If
End Select
End Subroutine vsum
End Module vtest
Program test
Use vtest
Type (V) :: z
z% kn = "Real32"
Allocate (z% vc_real32(3))
Write (*,*) "z = u + v"
Write (*,*) "z% kn: ", z% kn
z = u + v
Write (*,*) "z% kn: ", z% kn
Write (*,*) "z: ", z% vc_real32
End Program vtest
'vsum'のコードを表示してください。 –
コードはまだ不完全です。ほとんどの場合mcve http://stackoverflow.com/help/mcveオペレータの呼び出しとその周囲がありません。表示されていない詳細にバグがある可能性があります。完全にコンパイル可能なコードを用意する必要があります。コードの出力を含めます。操作が実行されていないことをどのように診断しましたか?代わりに何が起こったのですか? –