Ich habe einen abgeleiteten Typ V erstellt und eine Add-Funktion enthalten, so dass ich den Operator + verwenden kann.Fortran: Zugriff auf Werte vom Rückgabetyp einer Funktion
aber wenn ich
z = u + v
die Operation nicht durchgeführt wird. Ich denke es ist, weil z%kn
nicht zugegriffen wird.
aber wenn ich
Call vsum(z, u, v)
alles
Nachfolgend finden Sie die Erklärung des abgeleiteten Typ und die Überlastung Funktion VADD erwartet funktioniert.
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
Bitte geben Sie Ihren Code für 'vsum' an. –
Der Code ist immer noch unvollständig. Kaum ein mcve http://stackoverflow.com/help/mcve Es fehlt der Operator Aufruf und seine Umgebung. Es kann einen Fehler in jedem Detail geben, das Sie nicht gezeigt haben. Sie sollten einen vollständig kompilierbaren Code vorbereiten. Fügen Sie die Ausgabe Ihres Codes ein. Wie haben Sie festgestellt, dass die Operation nicht ausgeführt wird? Was ist stattdessen passiert? –