Zitat von
Neutral General:
Wenn man will das die Methode in der Basisklasse leer ist dann könnte man sie doch theoretisch auch einfach virtual machen und sie leer lassen. Dann würde es wenigstens nicht krachen wenn man sie aufruft...
Dass es kracht
ist ein Vorteil. Das bedeutet naemlich, dass man bei der Implementierung etwas falsch gemacht hat.
Stell dir mal vor:
TStream deklariert Read(...) als virtuell, und implementiert eine leere Funktion.
TFileStream implementiert aber kein Read(...)
Wenn ich nun TFileStream.Read aufrufe, dann passiert nix - und es funktioniert auch nix. Durch abstract wird man (wie du erkannt hast) gezwungen, die Methode entweder zu deklarieren, oder weiterhin als abstract beizubehalten - durch denentsprechende Deklaration.
Die Fehlermeldung, die du erhaelst, zeigt dir, dass etwas nicht stimmt, und du kannst das Problem schnell lokalisieren. Wenn aber kein Fehler auftritt, und das Programm einfach nicht funktioniert (weil eben bspw. keine Daten aus TFileStream gelesen werden), dann sitzt man schon mal ein paar Stunden/Tage an der Fehlersuche
greetz
Mike