Interessante Anregungen und gute Links, vielen Dank
Rollo62.
Versuche das mal zu erklären....
Ich hab damals mit TurboPascal 6.0 angefangen, dann 7.0 danach mal kurz bei Pascal für Windows 1.0 reingeguckt und lange Zeit (bis Delphi XE mal günstig angeboten wurde) mit Delphi 4.0 gearbeitet.
Ich hab also nicht jede Entwicklung mitbekommen, wie man was heutzutage korrekt verwendet. Mit object bin ich immer gut gefahren während Klassen, deren Pointern und Konstrukt- und Destruktoren, propertys und read/write... meinen einfachen Verstand übersteigen.
Ich hab schon 2x versucht, mit den gedruckten Entwicklerhandbüchern mich in Klassen und Komponenten-Entwicklung einzuarbeiten und bin jedesmal bei der Vererbung frustriert stecken geblieben - vielleicht auch, weil die Abhandlung für mein jeweiliges Projekt nicht zielführend und dem zeitsparenden Gedanken des
RAD entgegen stand.
Ich habs dann jeweils aufgegeben und mich mit einfachen Objektentypen (record, object) zufrieden gegeben, denn das hat ja funktioniert und ich vermeide langwährende Fehlersuchen, weil ich irgendwo eine AccessViolation bekomme
Aber ich lerne gerne dazu, wenns nicht allzu abstrakt ist...
Das also dazu, warum ich object anstelle von class nutze (übersichtlich, Denkstruktur).
Jetzt also mal so
Code:
function Interpreter(cmd:string; Modus:TModus; inScript:TScript = nil):TStatus;
Hierzu sagt der DCC: "E2268 Parameter dieses Typs dürfen keine Standardwerte haben" und steht mit dem Cursor beim nil.
Aber mit "
" -einfach so- funktioniert es, und auch daß ich den Parameter weglassen kann... - Problem gelöst!?
Was macht der Compiler denn da unter der Motorhaube anders?
Muss ich dann jetzt auch contructor und destructor einbauen, weil - es läuft grundlegend erstmal auch so, aber beim Zugriff auf die Variable "script" mit
Code:
if not assigned(script) then script:=TStringList.create;
bekomme ich eine Zugriffsverletzung...?
Wäre der leichte Weg wohl eher (entsprechend der Anregung von
milos), daß ich einen Dummy deklariere und in der Funktion prüfe, ob dort was sinnvolles drinsteht:
Code:
var dummy:TScript;
begin
State:=Interpreter(script[line],mSingle,dummy);