Autor Beitrag
Lupin003
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: Di 23.12.03 01:07 
Nein, ich frage nicht nach einer Partei, sondern nach Unions aus C++, denn ich möchte gerne einen Typ erstellen auf den ich auf 2 Arten zugreifen kann. Ich will einmal ganz einfach als 32bit variable dadrauf zugreifen und einmal alle 4 bytes einzeln (es handelt sich um einen Farbwert). Wie mach ich das am schlausten? Ich hab bisher immer mit Pointerkonstruktionen gearbeitet, aber das kommt mir irgendwie dumm vor :)

_________________
n00b alarm ;P
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 23.12.03 01:21 
Nur mal so ein Gedanke: Entsprechen Unions nicht Records in Delphi? Ich bin mir nicht sicher, aber ich meine gehört zu haben, dass Unions die alte Art sind strrucs zu definieren.
obbschtkuche
Gast
Erhaltene Danke: 1



BeitragVerfasst: Di 23.12.03 01:35 
So sollte es gehen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
Tdeinrec = record
 case integer of
  0: (asdword: dword);
  1: (r,g,b,a: byte);
 end;
Lupin003 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: Di 23.12.03 14:44 
Titel: wow ty
Funktioniert! Danke!

Allerdings macht dieses case of für mich überhaupt keinen sinn... delphi ist manchmal irgendwie sehr komisch ^^

_________________
n00b alarm ;P
ErnestoChe
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 528

Win 2000 pro, CRUX 2.0
Delphi 6 Pers, Open K3
BeitragVerfasst: Di 23.12.03 14:55 
Hi,

Luckie hat folgendes geschrieben:
Nur mal so ein Gedanke: Entsprechen Unions nicht Records in Delphi? Ich bin mir nicht sicher, aber ich meine gehört zu haben, dass Unions die alte Art sind strrucs zu definieren.


Nein. Unions und Strukturen sind zwei verschiedene Dinge, auch wenn die Deklaration ähnlich aussieht. Struct entspricht einem record in Delphi. Bei einem union dagegen belegen alle Elemente den selben Speicher. D.h. es ist immer nur ein Element gültig:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
union MyUnion
{
  int i;
  char c;
};

int main()
{
  MyUnion u;

  u.i = 2;
  cout << u.i << endl;
  u.c = 'A';              // <---- u.i ist nicht mehr gültig, dafür u.c
  cout << u.c << endl;
  cout << u.i << endl;    // <---- Achtung, u.i enthält Müll, bzw. den Inhalt von u.c

  return 0;
}


MFG

- Ernesto -
ErnestoChe
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 528

Win 2000 pro, CRUX 2.0
Delphi 6 Pers, Open K3
BeitragVerfasst: Di 23.12.03 15:27 
Hi,

Lupin003 hat folgendes geschrieben:
Allerdings macht dieses case of für mich überhaupt keinen sinn... delphi ist manchmal irgendwie sehr komisch ^^


Wenn man von C++ kommt ist das allerdings missverständlich und sehr verwirrend. Aber von der Syntax her wird damit dem Compiler klargemacht, dass es sich um einen varianten record bzw. den varianten Teil eines records handelt.

Die Delphi-hilfe hat dazu auch einen Artikel. Kannst du ja mal nachschauen.

MFG

- Ernesto -