<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Struktur mit Union initialisieren]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe gerade das Problem, dass ich es nicht hinbekomme, meine Mat4 Struktur zu initialisieren (ohne Konstruktor). Der Struktur habe ich eine Union spendiert, wenn ich die Union weglasse funktioniert alles wie gewohnt, also liegt es an der Union. In diesem Zusammenhang habe ich noch nie eine Union benutzt, also weiß ich nicht mehr weiter. Ich hoffe ihr könnt mir helfen.</p>
<p>Mat4.h:</p>
<pre><code class="language-cpp">#ifndef MAT4_H
#define MAT4_H

#include &quot;Types.h&quot;

namespace sipgl
{
	struct SIPGL_API Mat4
	{
	public:
		union
		{
			Float32 m[16];
			Float32 m11, m21, m31, m41,
				m21, m22, m23, m24,
				m31, m32, m33, m34,
				m41, m42, m43, m44;
		}

		static const Mat4 Identity;
	};
}

#endif
</code></pre>
<p>Mat4.cpp</p>
<pre><code class="language-cpp">#include &quot;Mat4.h&quot;

namespace sipgl
{
	const Mat4 Mat4::Identity = {1.0f, 0.0f, 0.0f, 0.0f,
				0.0f, 1.0f, 0.0f, 0.0f,
				0.0f, 0.0f, 1.0f, 0.0f,
				0.0f, 0.0f, 0.0f, 1.0f };
}
</code></pre>
<p>Vielen Dank im Voraus!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/307624/struktur-mit-union-initialisieren</link><generator>RSS for Node</generator><lastBuildDate>Thu, 06 Aug 2026 16:00:54 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/307624.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 31 Aug 2012 11:43:32 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Struktur mit Union initialisieren on Fri, 31 Aug 2012 11:43:32 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe gerade das Problem, dass ich es nicht hinbekomme, meine Mat4 Struktur zu initialisieren (ohne Konstruktor). Der Struktur habe ich eine Union spendiert, wenn ich die Union weglasse funktioniert alles wie gewohnt, also liegt es an der Union. In diesem Zusammenhang habe ich noch nie eine Union benutzt, also weiß ich nicht mehr weiter. Ich hoffe ihr könnt mir helfen.</p>
<p>Mat4.h:</p>
<pre><code class="language-cpp">#ifndef MAT4_H
#define MAT4_H

#include &quot;Types.h&quot;

namespace sipgl
{
	struct SIPGL_API Mat4
	{
	public:
		union
		{
			Float32 m[16];
			Float32 m11, m21, m31, m41,
				m21, m22, m23, m24,
				m31, m32, m33, m34,
				m41, m42, m43, m44;
		}

		static const Mat4 Identity;
	};
}

#endif
</code></pre>
<p>Mat4.cpp</p>
<pre><code class="language-cpp">#include &quot;Mat4.h&quot;

namespace sipgl
{
	const Mat4 Mat4::Identity = {1.0f, 0.0f, 0.0f, 0.0f,
				0.0f, 1.0f, 0.0f, 0.0f,
				0.0f, 0.0f, 1.0f, 0.0f,
				0.0f, 0.0f, 0.0f, 1.0f };
}
</code></pre>
<p>Vielen Dank im Voraus!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2247329</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247329</guid><dc:creator><![CDATA[TeaTime]]></dc:creator><pubDate>Fri, 31 Aug 2012 11:43:32 GMT</pubDate></item><item><title><![CDATA[Reply to Struktur mit Union initialisieren on Fri, 31 Aug 2012 12:02:28 GMT]]></title><description><![CDATA[<p>1. Warum überhaupt eine Union? Das ist eher eine Hacker-Datenstruktur und in strukturiertem C und in C++ erst recht eher ungewöhnlich.<br />
2. Ich wette deine Union ist anders als du denkst. Deine Union enthält entweder ein float[16] oder einen von 16 verschiedenen einzelnen floats unter anderem Namen.<br />
3. Da fehlen mindestens noch ein paar Semikolons nach der Union-Deklaration und wahrscheinlich willst du dem guten Stück auch noch einen Namen geben.<br />
4. Was willst du überhaupt erreichen? Wenn es dir darum geht, einzelne Elemente eines Arrays über 2D-Koordinaten anzusprechen, dann gibt es wesentlich robustere Möglichkeiten dafür, ganz ohne die Sprache zu vergewaltigen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2247332</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247332</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 31 Aug 2012 12:02:28 GMT</pubDate></item><item><title><![CDATA[Reply to Struktur mit Union initialisieren on Fri, 31 Aug 2012 11:59:08 GMT]]></title><description><![CDATA[<p>Ganz vergessen, die Fehlermeldung <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    />.</p>
<pre><code>IntelliSense: &quot;class &quot;sipgl::Mat4&quot;&quot; hat keinen Member &quot;&quot;Identity&quot;&quot;. mat4.cpp 5 19
IntelliSense: Zu viele Initialisiererwerte. mat4.cpp 5 31
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2247333</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247333</guid><dc:creator><![CDATA[TeaTime]]></dc:creator><pubDate>Fri, 31 Aug 2012 11:59:08 GMT</pubDate></item><item><title><![CDATA[Reply to Struktur mit Union initialisieren on Fri, 31 Aug 2012 12:06:37 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>1. Warum überhaupt eine Union?<br />
2. Ich wette deine Union ist anders als du denkst. Deine Union enthält entweder ein float[16] oder einen von 16 verschiedenen einzelnen floats unter anderem Namen.<br />
3. Was willst du überhaupt erreichen? Wenn es dir darum geht, einzelne Elemente eines Arrays über 2D-Koordinaten anzusprechen, dann gibt es wesentlich robustere Möglichkeiten dafür, ganz ohne die Sprache zu vergewaltigen.</p>
</blockquote>
<p>Zu 1.: damit man entweder mat.m[0] oder mat.m11 schreiben kann, also einfach nur damit man die Möglichkeit hat, den Namen der Stelle explizit anzugeben oder eben einfach nur über einen Index.</p>
<p>Zu 2.: das ist mir bewusst.</p>
<p>Zu 3.: siehe 1., man könnte dies auch über Operatorenüberladung [] machen, stimmt, vielleicht sollte ich es so machen</p>
<p>Aber wie würde es denn gehen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2247335</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247335</guid><dc:creator><![CDATA[TeaTime]]></dc:creator><pubDate>Fri, 31 Aug 2012 12:06:37 GMT</pubDate></item><item><title><![CDATA[Reply to Struktur mit Union initialisieren on Fri, 31 Aug 2012 12:13:15 GMT]]></title><description><![CDATA[<p>TeaTime schrieb:</p>
<blockquote>
<p>Zu 2.: das ist mir bewusst.</p>
</blockquote>
<p>Bist du dir sicher, dass du verstanden hast, was SeppJ meinte?</p>
<p>Entweder, du hast ein array von 16 floats oder einen einzelnen(!) float. Nicht 16 floats die auf den 16 Speicherstellen des arrays stehen. Desweiteren bin ich mir gerade nicht einmal sicher, ob du die Union nach Standard C++ so verwenden darfst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2247341</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247341</guid><dc:creator><![CDATA[otze_logout]]></dc:creator><pubDate>Fri, 31 Aug 2012 12:13:15 GMT</pubDate></item><item><title><![CDATA[Reply to Struktur mit Union initialisieren on Fri, 31 Aug 2012 12:16:43 GMT]]></title><description><![CDATA[<p>Oh verdammt, ja stimmt da ist ja nur ein Float, jetzt verstehe ich was gemeint ist <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    />.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2247344</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247344</guid><dc:creator><![CDATA[TeaTime]]></dc:creator><pubDate>Fri, 31 Aug 2012 12:16:43 GMT</pubDate></item><item><title><![CDATA[Reply to Struktur mit Union initialisieren on Fri, 31 Aug 2012 12:19:09 GMT]]></title><description><![CDATA[<p>Gut dann streich ich das einfach mit dem Union und überlade einfach den Operator.</p>
<p>Vielen Dank!</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2247346</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247346</guid><dc:creator><![CDATA[TeaTime]]></dc:creator><pubDate>Fri, 31 Aug 2012 12:19:09 GMT</pubDate></item><item><title><![CDATA[Reply to Struktur mit Union initialisieren on Fri, 31 Aug 2012 12:20:26 GMT]]></title><description><![CDATA[<p>Das ist doch sowieso reichlich sinnlos, wenn du immer m12 statt m[1][2] (oder m(1,2)) schreiben musst. Denn dann kannst du gar keine Variable als Index a la m(x,y) benutzen. Operatorüberladung und/oder ein kleiner Wrapper um das Array sind der bessere Weg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2247347</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247347</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 31 Aug 2012 12:20:26 GMT</pubDate></item><item><title><![CDATA[Reply to Struktur mit Union initialisieren on Fri, 31 Aug 2012 12:33:46 GMT]]></title><description><![CDATA[<p>Ja klar, so gesehen ist es das auch. Nur in der Mathematik heißen die Elemente so, deshalb konnte sich diese &quot;Art&quot; der Implementieren wohl halten, denn die Matrixen in XNA, SlimDX etc. werden tatsächlich so geschrieben. Ich glaub ich werde es einfach so lassen, is ja eigentlich egal ob man nun mat.m11 oder mat[0] schreibt, obwohl ich m11 aussagekräftiger halte, weils in der Mathematik halt so angegeben ist, aber das ist wohl Geschmackssache.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2247353</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247353</guid><dc:creator><![CDATA[TeaTime]]></dc:creator><pubDate>Fri, 31 Aug 2012 12:33:46 GMT</pubDate></item><item><title><![CDATA[Reply to Struktur mit Union initialisieren on Fri, 31 Aug 2012 12:51:34 GMT]]></title><description><![CDATA[<p>fuege doch einfach eine Funktion m(i,j) hinzu.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2247360</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247360</guid><dc:creator><![CDATA[otze_logout]]></dc:creator><pubDate>Fri, 31 Aug 2012 12:51:34 GMT</pubDate></item><item><title><![CDATA[Reply to Struktur mit Union initialisieren on Fri, 31 Aug 2012 12:55:30 GMT]]></title><description><![CDATA[<p>Das ist ja interessant in der DirectXMath API wird das tatsächlich so gemacht, wie ich es ursprünglich vorhatte.</p>
<p>Hier die XMFLOAT4X4 union.</p>
<pre><code class="language-cpp">union XMFLOAT4X4 {
  union {
    struct {
      float _11;
      float _12;
      float _13;
      float _14;
      float _21;
      float _22;
      float _23;
      float _24;
      float _31;
      float _32;
      float _33;
      float _34;
      float _41;
      float _42;
      float _43;
      float _44;
    };
    float m[4][4];
  };
};
</code></pre>
<p><a href="http://msdn.microsoft.com/en-us/library/windows/desktop/microsoft.directx_sdk.reference.xmfloat4x4%28v=vs.85%29.aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/windows/desktop/microsoft.directx_sdk.reference.xmfloat4x4(v=vs.85).aspx</a></p>
<p>Da is es halt einen Union, es kommt aber das gleiche raus.<br />
Über den Weg einer Struktur in der Union, so muss man das machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2247362</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247362</guid><dc:creator><![CDATA[TeaTime]]></dc:creator><pubDate>Fri, 31 Aug 2012 12:55:30 GMT</pubDate></item><item><title><![CDATA[Reply to Struktur mit Union initialisieren on Fri, 31 Aug 2012 13:36:53 GMT]]></title><description><![CDATA[<p>DirectX ist ja auch ein C-API.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2247376</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247376</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Fri, 31 Aug 2012 13:36:53 GMT</pubDate></item><item><title><![CDATA[Reply to Struktur mit Union initialisieren on Fri, 31 Aug 2012 15:58:50 GMT]]></title><description><![CDATA[<p>DirectXMath ist eine <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/hh437833%28v=vs.85%29.aspx" rel="nofollow">C++-API</a>.</p>
<p>MS interessiert sich allerdings nur dafür, ob ihr Zeug mit Visual C++ läuft. Laut C++-Standard darf man bei so einer Union doch sowieso nur auf das zuletzt verwendete Feld zugreifen... also aus dem Array lesen, wenn man zuletzt ins Array geschrieben hat und aus dem struct, wenn man zuletzt dessen Member geschrieben hat. Kreuz und quer ist nicht erlaubt. Richtig?</p>
<p>Mit VC++ funktioniert das also, mit anderen Compilern unter Umständen nicht. Falls das für OP relevant sein sollte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2247425</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247425</guid><dc:creator><![CDATA[nicht ganz]]></dc:creator><pubDate>Fri, 31 Aug 2012 15:58:50 GMT</pubDate></item><item><title><![CDATA[Reply to Struktur mit Union initialisieren on Fri, 31 Aug 2012 16:54:40 GMT]]></title><description><![CDATA[<p>nicht ganz schrieb:</p>
<blockquote>
<p>Richtig?</p>
</blockquote>
<p>Richtig. Man sollte aber beachten, dass das eher eine Klausel ist, um bestimmte Sonderfälle (Alignmentprobleme, mit komplexen Datentypen fangen wir lieber gar nicht erst an) abzusichern. Wenn man sich halbwegs auskennt und keine Dummheiten macht, dann funktioniert das mit der Union so wie man erwartet, sogar ziemlich portabel - eher ist die Plattform das Problem als der Compiler. Und wenn man wie der Implementierer von DirectX davon ausgehen kann, dass eine bestimmte Zielplattform vorliegt, dann kann man sich sogar mit Sicherheit drauf verlassen. Insofern ist das schon in Ordnung, das hier so zu machen. Da die Feldgröße anscheinend statisch ist und nicht über das Reihen/Spalten iteriert werden muss, ist das sogar eine einigermaßen brauchbare Idee.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2247443</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247443</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 31 Aug 2012 16:54:40 GMT</pubDate></item></channel></rss>