Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi inkompatible Typen bei Mengen (Set) (https://www.delphipraxis.net/49449-inkompatible-typen-bei-mengen-set.html)

TomDooley 11. Jul 2005 16:12


inkompatible Typen bei Mengen (Set)
 
Hallo

Ich habe folgende Menge definiert:
Delphi-Quellcode:
tMyMenge = set of(cEins,cHundert,cTausend);
Nun möchte ich prüfen ob ein Integer einen Wert der Menge angenommen hat:
Delphi-Quellcode:
if (MyInteger in MyMenge) then...
Leider funktioniert das nicht. Der Compiler gibt folgende Fehlermeldung aus:
Delphi-Quellcode:
Inkompatible Typen: 'Integer' und 'Enumeration'
Ich denke, irgendwie muss ich MyInteger in Enumeration casten... Geht das überhaupt? Wie?

Danke und Gruss

Tom

Christian Seehase 11. Jul 2005 16:15

Re: inkompatible Typen bei Mengen (Set)
 
Moin Tom,

das ginge so

Delphi-Quellcode:
TMyMenge(MyInteger)

Grendel 11. Jul 2005 16:17

Re: inkompatible Typen bei Mengen (Set)
 
Oder, um sicherzustellen, daß Du nicht außerhalb des Bereiches liegst kannst Du auch mit
GetEnumName() bzw. GetEnumValue() arbeiten.

Bis neulich ...

TomDooley 11. Jul 2005 16:57

Re: inkompatible Typen bei Mengen (Set)
 
Zitat:

Zitat von Christian Seehase
das ginge so
Delphi-Quellcode:
TMyMenge(MyInteger)

Das habe ich auch probiert, bzw.
Delphi-Quellcode:
if (tMyMenge(MyInteger) in MyMenge) then ...
aber das tut so nicht. Ich bekomme dann die Fehlermeldung:

Delphi-Quellcode:
Ungültige Typumwandlung
@Grendel:
Zitat:

Oder, um sicherzustellen, daß Du nicht außerhalb des Bereiches liegst kannst Du auch mit
GetEnumName() bzw. GetEnumValue() arbeiten.
:gruebel: Wie meinst du das? Soll ich auf alle drei Werte im Set prüfen?

Danke und Gruss

Tom

Khabarakh 11. Jul 2005 17:04

Re: inkompatible Typen bei Mengen (Set)
 
Probier es mal so:
Delphi-Quellcode:
TMyEnum = (cEins, cHundert, cTausend);
TMySet = set of TMyEnum;

[..]

if TMyEnum(MyInteger) in MySet then

Hansa 11. Jul 2005 19:43

Re: inkompatible Typen bei Mengen (Set)
 
Das sieht alles schwer nach Spekulation aus. 8) Du verwechselst einen Aufzählungstyp mit einem integer. So gehts aber nicht und darüber hat der Compiler zurecht gemeckert.

Was soll das :
Delphi-Quellcode:
in
bei 3 möglichen Varianten ? :shock:

Benutze ein CASE und fertig. Guck Dir die Funktion Ord an. Wahrscheinlich liegt der Fehler aber eher daran, daß der Typ zwar deklariert ist, aber keine Variable.

BlackJack 11. Jul 2005 21:00

Re: inkompatible Typen bei Mengen (Set)
 
@Hansa: wieso spekulation? wieso kein in? der code von kabarakaback funktioniert doch einwandfrei.

SirThornberry 11. Jul 2005 21:05

Re: inkompatible Typen bei Mengen (Set)
 
naja, ein Integer ist eben kein Enum, das ist wie Äpfel und Birnen. Ein "Set of" ist ein Byte groß und ein Integer ist 4 Byte groß. Und der "in" Operator funktioniert nur bei Typen die 1 Byte groß sind denn auf welches Byte soll sonst die BitKombination getestet werden?

BlackJack 11. Jul 2005 21:11

Re: inkompatible Typen bei Mengen (Set)
 
ok, man sollte natürlich davon ausgehen, dass der integer auch gescheit gefüllt ist, d.h. dass das richtige der 4 bytes mit einem korrekten wert gefüllt ist. das sollte z.b. ja auch so gehen:
Code:
type TMyEnum = (cEins, cHundert, cTausend);
var i: Integer;
    s: set of TMyEnum;
begin
i := Integer(cEins);

s := [cEins, cHundert];

if TMyEnum(i) in s then
  //...
end;
über den sinn von sowas lässt sich natürlich streiten (ich würde es z.b. niemals so machen), aber es ollte doch funktionieren (hab es allerdings nicht getestet).

Hansa 11. Jul 2005 21:13

Re: inkompatible Typen bei Mengen (Set)
 
Genau !

Set of geht nur mit max. 256 Werten. Ein Integer geht aber bis ?????????? Deshalb ist IN nicht geeignet ! Wer mit 10 testet, der denkt es gehe, aber mit 300 kommt der Rest. :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:17 Uhr.
Seite 1 von 2  1 2      

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