Konvertierung von Pointern

Thost

Level-1
Beiträge
8
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

angenommen ich habe eine Schnittstelle und einen Funktionsblock, der die Schnittstelle implementiert. Nun habe ich einen Pointer, der auf die Schnittstelle zeigt und einen Pointer, der auf den Funktionsblock zeigt. Kann mir jemand erklären, warum die folgende Typkonvertierung einen Fehler wirft?

Code:
INTERFACE IStep

FUNCTION_BLOCK SimpleStep IMPLEMENTS IStep

PROGRAM PLC_PRG
VAR
    p1 : POINTER TO IStep;
    p2 : POINTER TO SimpleStep;
END_VAR
...
p1 := p2; // Typ 'POINTER TO SimpleStep' kann nicht in Typ 'POINTER TO IStep' konvertiert werden
p2 := p1; // Funktioniert hingegen
 
Weil das Interface keine Daten hat. Wenn Du das Interface einem FB-Pointer zuweisen würdest, könntest Du mit dem FB-Pointer auf Daten zugreifen, die gar nicht existieren, und Dein Controller würde sich ins Land des Lächelns verabschieden.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das habe ich noch nicht ganz verstanden. Im Fall p1 := p2 würde p1 doch auf den Funktionsblock zeigen. Wieso kann ich dann nicht mit p1 auf die Daten von dem Funktionsblock zugreifen? Der Funktionsblock implementiert ja schließlich das Interface.
 
Hm, da hast Du eigentlich Recht. Aber nicht alles, was funktioniert, ist auch erlaubt. Ich habe mich an anderen Stellen darüber auch schon geärgert.
 
Zurück
Oben