Andreas K. Foerster schrieb:
warum geht folgendes nicht?
constructor Takfquiz.Init(var infile: text); begin {...} inp := infile; end;
In FreePascal klappt das einwandfrei.
Ich möchte nicht einfach nur Dateinamen übergeben, weil das auch mit spezielleren Dateihandles klappten soll.
Zuweisungen zwischen Dateitypen sind nach allen mir bekannten Standards (und auch in TP) ausdrücklich nicht erlaubt.
Der Grund ist, dass sie intern oft Buffer und Zeiger darauf oder sonstige Statusinformationen enthalten. Wenn man die nun einfach kopiert, und dann mit einer Kopie was macht, entspricht die andere Kopie nicht mehr der tatsächlichen Datei (die ja bei einer Zuweisung nicht mitkopiert wird).
Natürlich kann man es anders implementieren (z.B. dass Dateitypen intern einfach Zeiger sind oder so). Trotzdem sollte ein guter Compiler das verbieten, damit sich der Programmierer nicht daran gewöhnt, Programme zu schreiben, die eigentlich falsch sind und nur von einem Compiler "zufällig" akzeptiert werden.
(BTW, nur mal aus Interesse, was gibt `SizeOf (Text)' under FPC? Wenn es ein kleiner Wert ist (4 oder so), ist es vermutlich als Zeiger implementiert. Wenn es ein größerer Wert ist, ist es auch möglich, dass das Problem dort besteht und der Compiler es nur nicht erkennt. Je nach Implementation kann das dann diverse subtile Bugs zur Folge haben.)
andere Alternativvorschläge?
Zeiger auf Dateitypen zuweisen (`^Text').
Frank