AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

inkompatible Typen bei Mengen (Set)

Ein Thema von TomDooley · begonnen am 11. Jul 2005 · letzter Beitrag vom 12. Jul 2005
Antwort Antwort
Seite 1 von 2  1 2      
TomDooley

Registriert seit: 26. Jan 2004
124 Beiträge
 
#1

inkompatible Typen bei Mengen (Set)

  Alt 11. Jul 2005, 17:12
Hallo

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

Danke und Gruss

Tom
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: inkompatible Typen bei Mengen (Set)

  Alt 11. Jul 2005, 17:15
Moin Tom,

das ginge so

TMyMenge(MyInteger)
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Grendel
(Gast)

n/a Beiträge
 
#3

Re: inkompatible Typen bei Mengen (Set)

  Alt 11. Jul 2005, 17:17
Oder, um sicherzustellen, daß Du nicht außerhalb des Bereiches liegst kannst Du auch mit
GetEnumName() bzw. GetEnumValue() arbeiten.

Bis neulich ...
  Mit Zitat antworten Zitat
TomDooley

Registriert seit: 26. Jan 2004
124 Beiträge
 
#4

Re: inkompatible Typen bei Mengen (Set)

  Alt 11. Jul 2005, 17:57
Zitat von Christian Seehase:
das ginge so
TMyMenge(MyInteger)
Das habe ich auch probiert, bzw. if (tMyMenge(MyInteger) in MyMenge) then ... aber das tut so nicht. Ich bekomme dann die Fehlermeldung:

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

Danke und Gruss

Tom
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#5

Re: inkompatible Typen bei Mengen (Set)

  Alt 11. Jul 2005, 18:04
Probier es mal so:
Delphi-Quellcode:
TMyEnum = (cEins, cHundert, cTausend);
TMySet = set of TMyEnum;

[..]

if TMyEnum(MyInteger) in MySet then
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#6

Re: inkompatible Typen bei Mengen (Set)

  Alt 11. Jul 2005, 20:43
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 : in bei 3 möglichen Varianten ?

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.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von BlackJack
BlackJack

Registriert seit: 2. Jul 2005
Ort: Coesfeld
246 Beiträge
 
Delphi 2005 Personal
 
#7

Re: inkompatible Typen bei Mengen (Set)

  Alt 11. Jul 2005, 22:00
@Hansa: wieso spekulation? wieso kein in? der code von kabarakaback funktioniert doch einwandfrei.
See my shadow changing, stretching up and over me.
Soften this old armor. Hoping I can clear the way
By stepping through my shadow, coming out the other side.
Step into the shadow. Forty six and two are just ahead of me.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#8

Re: inkompatible Typen bei Mengen (Set)

  Alt 11. Jul 2005, 22:05
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?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von BlackJack
BlackJack

Registriert seit: 2. Jul 2005
Ort: Coesfeld
246 Beiträge
 
Delphi 2005 Personal
 
#9

Re: inkompatible Typen bei Mengen (Set)

  Alt 11. Jul 2005, 22:11
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).
See my shadow changing, stretching up and over me.
Soften this old armor. Hoping I can clear the way
By stepping through my shadow, coming out the other side.
Step into the shadow. Forty six and two are just ahead of me.
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#10

Re: inkompatible Typen bei Mengen (Set)

  Alt 11. Jul 2005, 22:13
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.
Gruß
Hansa
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:14 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