Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Set of - Warum kein Compiler-Fehler? (https://www.delphipraxis.net/71943-set-warum-kein-compiler-fehler.html)

Martin K 22. Jun 2006 18:07


Set of - Warum kein Compiler-Fehler?
 
Hi,

folgender Code (vereinfacht):

Delphi-Quellcode:
  type
    TElement = (Wert1, Wert2, Wert3, Wert4, Wert5);
    TElemente1 = set of Wert2..Wert4;
    TElemente2 = set of TElement;
{...}

procedure Irgendwas(Wert: TElemente1);
begin
  //...
end;
Wenn ich jetzt folgenden Aufruf durchführe:
Delphi-Quellcode:
  Irgendwas( [Wert1, Wert2] );
gibt es keine Fehlermeldung.

Warum nicht?
Wert1 ist doch gar nicht in TElemente1 enthalten...

Wie kann ich das Problem lösen, ohne einen zweiten Typ TElement zu definieren ?

pszopp 22. Jun 2006 19:42

Re: Set of - Warum kein Compiler-Fehler?
 
Hallo Martin,

wieso es hier keinen Fehler beim Kompilieren gibt, weiß ich auch nicht.
Scheint ihm egal zu sein :roll:

Im Moment wüsste ich nur, wie du falsche Übergabeparameter zur Laufzeit abfängst:
Delphi-Quellcode:
procedure Irgendwas(Wert: TElemente1);
var SmallSet : TElemente1;
begin
  SmallSet := [Wert2..Wert4];
  Assert((Wert - SmallSet) = [], 'Internal Error');

  ShowMessage('Hallo');
end;
Viele Grüße,
pszopp

Khabarakh 22. Jun 2006 19:56

Re: Set of - Warum kein Compiler-Fehler?
 
Sets sind nur verpackte Bitfelder (Wert1 = 1, wert2 = 2, Wert3 = 8 usw.). Ob nun das Bit, das du setzt, überhaupt eine Konstante des Sets ist oder nicht, ist ihm egal. Du kannst ihm auch TElemente2(65) zuweisen, das sollte dann [Wert1, "Wert7"] sein.

Martin K 22. Jun 2006 20:03

Re: Set of - Warum kein Compiler-Fehler?
 
Danke, für eure Antworten.

Das mit den Bitfelder war mir schon klar, aber ich dachte bei TElemente1 würde dann Wert2 = 1 sein.
Mir ist halt nicht klar, warum das komplette TElement genommen wird und nicht aus Wert2, Wert3, Wert4 ein neues Bitfeld erzeugt wird.

Khabarakh 22. Jun 2006 20:10

Re: Set of - Warum kein Compiler-Fehler?
 
Für den Compiler sind die Werte eben einfach nur Konstanten. Was er parst, ist eigentlich
Delphi-Quellcode:
TElemente = set of 2..8;
Weiter denkt der nicht ;) .


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:06 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