![]() |
Aufzählung- und Mengentype
Ich melde mich mal wieder mit einem Problem:
Ich möchte eine Änderung in einem bestehendem Programm machen, wo es folgende Definitionen gibt:
Delphi-Quellcode:
nun möchte ich das ganze zuweisungskompatibel gestalten und hab mir gedacht, ich löse das so:
teinszwei=(eins,zwei);
tdreivier=(drei,vier);
Delphi-Quellcode:
Nun kommt mein Problem: Die Zuweisungskompatibilität ist zwar gegeben, aber dafür gibt es ein anderes Problem:
teinsvier=(eins,zwei,drei,vier);
teinszwei=eins..zwei; tdreivier=drei..vier; tdreivier(0) ist eins; und da standardmäßig mit 0 initialisiert wird, werden alle variablen vom typ tdreivier mit eins initialisiert. Da das ganze Programm riesig ist und mit Sicherheit nicht alle Variablen manuell initialisiert werden... |
Re: Aufzählung- und Mengentype
Zitat:
tdreivier müßte mit (2) initialisiert werden, oder besser noch mit mit Low(tdreivier) ... falls du mal wieder was änderst :angel: Ja und wo ist nun eigentlich genau das Problem? Derartige Typen müssen doch so oder so schon immer initialisert werden, da dieses nicht automatisch von Delphi gemacht wird. (es sei den die Variable ist in einem Objekt definiert, welches standardmäßig mit Nullen initialisiert wird) |
Re: Aufzählung- und Mengentype
ja bei so wie es jetzt war wurde tdreivier automatisch mit drei initialisiert, jetzt mit eins. Leider kann ich nicht davon ausgehen, dass alle variablen von tdreivier explizit initialisiert wurden und ca. 1000 Vorkommen dieser Variablen im Quelltext zu inititalisieren ist doch sehr aufwendig...
Ich dachte, es gäbe eine andere Möglichkeit so etwas zu definieren... |
Re: Aufzählung- und Mengentype
Neeee, eine andere Möglichkeit gibt es nicht,
denn wenn es bisher "automatisch" Initialisiert wurde, dann wurde nicht Variable explizit initialisiert, sondern sie war rein zufällig an einer Stelle definiert, welche (wie z.B. der Variablenspeicher bei Objekten) global initialisert wurden und da wird meißt nur alles mit 0 gefüllt. Dir bleibt also keine andere Möglichkeit als dieses überall per Hand zu initialisieren. Der einzige alternative Ausweg wäre
Delphi-Quellcode:
aber da müßtest du dann eventuell an anderen Stellen wiederum prüfen, ob der Wert definiert bzw. richtig initialisiert wurde.
teinsvier = (undefiniert, eins, zwei, drei, vier);
|
Re: Aufzählung- und Mengentype
Ich glaube, dann werde ich die 'undefiniert'-Lösung nehmen.
Danke |
Re: Aufzählung- und Mengentype
Die Frage, die sich mir stellt, ist, warum du TEinsZwei und TDreiVier zuweisungskompatibel machen möchtest, wenn die Wertebereiche dieser beiden Typen sowieso unterscheiden. Du wirst den Wert aus einer Variablen des einen Typen niemals in eine Variable des anderen Typen schreiben können ohne die Wertebereiche zu verletzen.
|
Re: Aufzählung- und Mengentype
so könnte man z.B. Werte für Beides in nur einem Parameter übergeben?
z.B. wie bei dwFlagsAndAttributes in ![]() |
Re: Aufzählung- und Mengentype
Darauf zu vertrauen, dass die Werte die in nicht (bzw "automatisch") initialisierten Variablen stehen korrekt sind, halte ich persönlich für sehr gefährlich.
Deshalb würde ich die Finger davon lassen, diese Typen zu ändern und eher Funktionen für die Stellen schreiben, wo man eine Kompatibilität dieser Typen haben möchte. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz