Re: TObject kein ordinaler Typ?
Zitat:
Delphi-Quellcode:
procedure Test;
var i, k: Integer; begin i := MaxInt; k := MaxInt; if k in [Integer(i)] then begin ShowMessage('Integer'); end; k := 255; if k in [Integer(i)] then begin ShowMessage('Byte'); end; end; |
Re: TObject kein ordinaler Typ?
Zitat:
|
Re: TObject kein ordinaler Typ?
Zitat:
|
Re: TObject kein ordinaler Typ?
Mit anderen Worten: Meine Aussagen ist die Theorie, nur CodeGear hat mal wieder Mist gebaut (beim Umsetzen in die Praxis) und gibt keine Warnung aus. Wieder was gelernt - und ein neues Manko einer doch so typensicheren Sprache...
|
Re: TObject kein ordinaler Typ?
Zitat:
|
Re: TObject kein ordinaler Typ?
Es ist aber doch schwachsinnig hier eine compile-time only Meldung einzubauen anstatt auch den runtime Fall mit abzuprüfen.
|
Re: TObject kein ordinaler Typ?
Aktiviert man in den Compileroptionen die Bereichsüberprüfung, bekommt man die Meldung:
Code:
---------------------------
Benachrichtigung über Debugger-Exception --------------------------- Im Projekt Project1.exe ist eine Exception der Klasse ERangeError mit der Meldung 'Fehler bei Bereichsprüfung' aufgetreten. --------------------------- Anhalten Fortsetzen Hilfe --------------------------- |
Re: TObject kein ordinaler Typ?
Hi himitsu,
ich möchte mal auf deinen Eingangspost eingehen. Dazu ersetze ich die Variablen durch ihre Typbezeichnungen. Dadurch wird der Code zwar syntaktisch falsch, aber vielleicht fällt unseren Spezialisten dann auf, das sie mit ihrer Diskussion über Mengen nicht gerade zur Aufhellung dieses Delphi-Fehlers(?) beigetragen haben:
Delphi-Quellcode:
Beide Seiten des 'IN'-Operators sind vom Typ her identisch. Klar geht das.
If Integer in [Integer, Integer, Integer] Then ...
Delphi-Quellcode:
Äh. Beide Seiten des 'IN'-Operators sind nicht typkompatibel. Ich komme darauf zurück.
If TObject in [Integer, Integer, Integer] Then ...
Delphi-Quellcode:
Gottseidank meckert wenigstens da der Compiler, vonwegen "ordinaler Typ erforderlich". :gruebel:
If TObject in [TObject , TObject , TObject ] Then ...
Wieso geht das Konstrukt '<ObjectRef> IN <OrdinalSet>' durch den Compiler? Hmm. Mal sehen, was die Delphi-OH dazu sagt: In der Tabelle der Mengenoperatoren steht bei 'IN', das die Operatorn "Ordinalwert, Menge" sein müssen. :gruebel: Hupsa. Eine <ObjectRef> ist doch aber kein Ordinalwert. Oder? :shock: Um also himitsus Frage aufzugreifen Zitat:
:wall: Zitat:
|
Re: TObject kein ordinaler Typ?
Ich weiß ja nicht, ob du es ausprobiert hast, oder es einfach geglaubt hast.
Eventuell ist es auch einfach nur zu früh für mich, aber
Delphi-Quellcode:
gibt bei mir einen "E2010 Inkompatible Typen: 'TComponent' und 'Integer'" compiler error.
if Components[i] in [Integer(Panel1), Integer(Panel2), Integer(Panel3)] then ...
Somit dürfte meine Aussage nach wie vor stehen. Schau dir außerdem einmal den asm an, der für ein in-Statement erzeugt wird, dann siehst du, warum ein Hardcast eines 32-Bit Pointers auf ein Integer nix bringt (und warum in der OH das von mir zitierte steht) |
Re: TObject kein ordinaler Typ?
Hatte es ausprobiert, aber wegen eines Fehlers im Set war ich da nicht bis Then gekommen, so daß diese Fehlermeldung noch nicht angezeigt wurde.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:30 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz