Union-Frage und Vererbung von Unions
-
Hi,
ich habe eine struktur mit einem union drin für 4 float-werte und ein 2D-Array aus 2x2 Floats jetzt möchte ich gerne eine Klasse davon ableiten die noch mal 4 float-werte in form eines 1D arrays hat. Wie bekomm ich das hin, das in der abgeleiteten Struct dieses 1D-Array sich den speicher teilt mit den anderen float-werten aus der Basis-struktur? Halt so als erweiterung.
struct matrix2x2 { union { struct { float _11, _12; float _21, _22; }; float m[2][2]; }; }; struct matrix2x2_extension : public matrix2x2 { union { // Wie komm ich an die alten union-daten um das float-value[4] // diesen hinzuzufügen? float value[4]; } }
wie geht das?
-
*push*
-
Hallo
Ich bezweifle, das du im nachhinein die Definition von unions ändern kannst.
Das einfachste ist doch float value[4] bereits im union von matrix2x2 zu definieren.bis bald
akari
-
akari schrieb:
Hallo
Ich bezweifle, das du im nachhinein die Definition von unions ändern kannst.
Das einfachste ist doch float value[4] bereits im union von matrix2x2 zu definieren.bis bald
akariUnd was wenn das nicht geht?
-
probier dies:
struct matrix2x2 { union u { struct { float _11, _12; float _21, _22; }; float m[2][2]; }; }; struct matrix2x2_extension { union { matrix2x2::u u; float value[4]; }; };
-
Hallo,
euch ist aber schon klar, dassstruct matrix2x2 { union { struct { float _11, _12; float _21, _22; }; float m[2][2]; }; };
kein gültiges C++ ist, oder?
-
Warum denn das? Wegen dem zweidimensionalen Array innerhalb der Union?
Mir sieht es so aus, als soll die Union zum Casten misbraucht werden (was wiederum kein gültiges C++ wäre).
-
7H3 N4C3R schrieb:
Warum denn das? Wegen dem zweidimensionalen Array innerhalb der Union?
Nö. Weil eine anonyme struct nur dann legal ist, wenn bei ihrer Definition gleichzeitig auch ein Objekt angelegt wird. Sprich, legal wäre:
struct matrix2x2 { union u { struct { float _11, _12; float _21, _22; } o; float m[2][2]; }; };
Ohne das Objekt o wird hier gar nichts deklariert. Und eine Deklaration die nichts deklariert ist in C++ nicht erlaubt.
-
@HumeSikkins
damit kann man sich doch nun wirklich anpinkeln, oder nicht?
-
Wenn's dir Spass macht. Am Sachverhalt ändert das aber nichts.
Schon mal darüber nachgedacht, operator [] zu überladen?
-
groovemaster schrieb:
Wenn's dir Spass macht. Am Sachverhalt ändert das aber nichts.
Schon mal darüber nachgedacht, operator [] zu überladen?Schon mal darüber nachgedacht, das ich keinen operator [] überladen möchte und kann? z.B. wenn die 1. Struktur eine vorgefertigte ist?