Habe folgenden Fehler, dass ich keine struct vererben kann!Oder liegt dies an der Var_In_Out, wo die Variablen deklariert ist?
"Die Fehlermeldung VAR_IN_OUT 'Farbe_1' muss in Aufruf von 'Kind zugewiesen werden"!! Bitte um Lösung...
Die Fehlermeldung sagt dir ja schon, was du machen musst:
Beim Aufruf von
umwelt(farbe_1:=gelb);
musst du ALLE In-Out-Variablen angeben. Richtig wäre also
umwelt(farbe_1:=gelb,farbe:=gelb);
Das hat nichts mit der Vererbung zu tun, sondern In-Out-Variablen müssen immer angegeben werden beim Aufruf (war auch in V2 schon so). Alle Eingangs-/Ausgangs-Variablen des Vaters gelten natürlich auch für das Kind. Deshalb muss die In-Out-Variable des Vaters beim Kindaufruf mit angegeben werden.
So wie dein Beispiel ist, macht es sowieso wenig Sinn, dass in der Kindklasse nochmal der Eingang "Farbe_1" vorhanden ist und du den Eingang einfach auf den Eingang des Vaters schreibst (für den Fall, dass du noch irgendwelche Anpassungen innerhalb von Kind vor der Übergabe an Vater machst, macht es natürlich schon Sinn).
Du brauchst in dem Fall in der Kindklasse gar keinen zusätzlichen Eingang "Farbe_1" deklarieren, sondern immer nur mit dem Eingang "Farbe" arbeiten.
Der Aufruf der Kindklasse sieht dann so aus:
umwelt(farbe:=gelb);
Innerhalb der Kindklasse kannst du immer mit "farbe" arbeiten, da in der Kindklasse alle Variablen der Vaterklasse zur Verfügung stehen.
PS:
"super^.(Farbe:=Farbe_1)" ist vermutlich nur ein Schreibfehler, aber der Punkt muss natürlich weg.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Habe folgenden Fehler, dass ich keine struct vererben kann!Oder liegt dies an der Var_In_Out, wo die Variablen deklariert ist?
"Die Fehlermeldung VAR_IN_OUT 'Farbe_1' muss in Aufruf von 'Kind zugewiesen werden"!! Bitte um Lösung...
So wurde deklariert:
gelb : Struktur;
umwelt : Kind;
Die Struktur
TYPE Struktur :
STRUCT
......
END_STRUCT
END_TYPE
Die Vaterklasse
Basis
Var_in_out
Farbe : Struktur;
end_var
Die Kindklasse:
Kind extends Basis
Var_in_out
Farbe_1 :Struktur;
end_var
Codeteil der Kindklasse:
super^.(Farbe:=Farbe_1)
PLC-Aufruf
umwelt (farbe_1:=gelb);
Die Fehlermeldung sagt dir ja schon, was du machen musst:
Beim Aufruf von
musst du ALLE In-Out-Variablen angeben. Richtig wäre also
Das hat nichts mit der Vererbung zu tun, sondern In-Out-Variablen müssen immer angegeben werden beim Aufruf (war auch in V2 schon so). Alle Eingangs-/Ausgangs-Variablen des Vaters gelten natürlich auch für das Kind. Deshalb muss die In-Out-Variable des Vaters beim Kindaufruf mit angegeben werden.
So wie dein Beispiel ist, macht es sowieso wenig Sinn, dass in der Kindklasse nochmal der Eingang "Farbe_1" vorhanden ist und du den Eingang einfach auf den Eingang des Vaters schreibst (für den Fall, dass du noch irgendwelche Anpassungen innerhalb von Kind vor der Übergabe an Vater machst, macht es natürlich schon Sinn).
Du brauchst in dem Fall in der Kindklasse gar keinen zusätzlichen Eingang "Farbe_1" deklarieren, sondern immer nur mit dem Eingang "Farbe" arbeiten.
Der Aufruf der Kindklasse sieht dann so aus:
Innerhalb der Kindklasse kannst du immer mit "farbe" arbeiten, da in der Kindklasse alle Variablen der Vaterklasse zur Verfügung stehen.
PS:
"super^.(Farbe:=Farbe_1)" ist vermutlich nur ein Schreibfehler, aber der Punkt muss natürlich weg.