Einzelnen Beitrag anzeigen

SearchBot

Registriert seit: 27. Jun 2004
Ort: N-W vom Bodensee
272 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#11

AW: optionale Parameter mit object-type?

  Alt 19. Mai 2016, 00:16
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 "
Code:
type TScript = class
" -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);
  Mit Zitat antworten Zitat