<?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[Benutzen von &amp;quot;static const&amp;quot; Members in einer Switch anweisung....]]></title><description><![CDATA[<p>Hi,<br />
ich wollte gerade eigentlich nur ein Par Konstanten für eine Klasse definieren<br />
und diese dann innerhalb einer Switch/case Anweisung abarbeiten. Bekomme jedoch<br />
den fehler den ich aber nicht verstehe, weil die Variablen ja konstant sind?!? Oder wird der Speicher für Statische Member Konstante variablen dynamisch verwaltet?</p>
<p>Wenn ich mir nen namespace anlege z.B. <em>blub</em> dann geht das. Was ich aber dann nicht so schön finde ist, dass die Konstanten einem Namespace und nicht meiner Klasse zugeordnet sind.</p>
<p>Hat jemand eine erklärung dafür? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p><strong>Variante Namespace:</strong></p>
<pre><code>namespace blub{
	static const unsigned int A=1;
	static const unsigned int B=2;
}
</code></pre>
<p><strong>Variante Member variable:</strong><br />
<strong>Blub.h</strong></p>
<pre><code>#ifndef BLUB_H_
#define BLUB_H_

class Blub
{
public:
	static const unsigned int A;
	static const unsigned int B;
public:
	Blub();
	virtual ~Blub();
};

#endif /*BLUB_H_*/
</code></pre>
<p><strong>Blub.cpp</strong></p>
<pre><code>#include &quot;Blub.h&quot;
/*static*/ const unsigned int Blub::A=1;
/*static*/ const unsigned int Blub::B=2;
Blub::Blub()
{
}

Blub::~Blub()
{
}
</code></pre>
<p><strong>main.cpp</strong></p>
<pre><code>#include &lt;iostream&gt;
#include &quot;Blub.h&quot;
using namespace std;

int main() {
	unsigned int i = 2;
	switch(i)
	{
	case Blub::A:
		// aja a 
		break;
	case Blub::B:
		// aja b
		break;
	default:
		// no static member....
	}
	return 0;
}
</code></pre>
<blockquote>
<p>**** Build of configuration Debug for project Test ****</p>
<p>make all<br />
Building file: ../src/Blub.cpp<br />
Invoking: GCC C++ Compiler<br />
g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF&quot;src/Blub.d&quot; -MT&quot;src/Blub.d&quot; -o&quot;src/Blub.o&quot; &quot;../src/Blub.cpp&quot;<br />
Finished building: ../src/Blub.cpp</p>
<p>Building file: ../src/Test.cpp<br />
Invoking: GCC C++ Compiler<br />
g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF&quot;src/Test.d&quot; -MT&quot;src/Test.d&quot; -o&quot;src/Test.o&quot; &quot;../src/Test.cpp&quot;<br />
../src/Test.cpp: In function »int main()«:<br />
../src/Test.cpp:17: Fehler: »Blub::A« kann nicht in Konstanten-Ausdruck auftreten<br />
../src/Test.cpp:20: Fehler: »Blub::B« kann nicht in Konstanten-Ausdruck auftreten<br />
../src/Test.cpp:25: Fehler: expected primary-expression before »}« token<br />
../src/Test.cpp:25: Fehler: expected `;' before »}« token<br />
make: *** [src/Test.o] Fehler 1</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/topic/212695/benutzen-von-quot-static-const-quot-members-in-einer-switch-anweisung</link><generator>RSS for Node</generator><lastBuildDate>Wed, 14 Oct 2026 18:56:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/212695.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 09 May 2008 10:04:02 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Benutzen von &amp;quot;static const&amp;quot; Members in einer Switch anweisung.... on Fri, 09 May 2008 10:04:02 GMT]]></title><description><![CDATA[<p>Hi,<br />
ich wollte gerade eigentlich nur ein Par Konstanten für eine Klasse definieren<br />
und diese dann innerhalb einer Switch/case Anweisung abarbeiten. Bekomme jedoch<br />
den fehler den ich aber nicht verstehe, weil die Variablen ja konstant sind?!? Oder wird der Speicher für Statische Member Konstante variablen dynamisch verwaltet?</p>
<p>Wenn ich mir nen namespace anlege z.B. <em>blub</em> dann geht das. Was ich aber dann nicht so schön finde ist, dass die Konstanten einem Namespace und nicht meiner Klasse zugeordnet sind.</p>
<p>Hat jemand eine erklärung dafür? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p><strong>Variante Namespace:</strong></p>
<pre><code>namespace blub{
	static const unsigned int A=1;
	static const unsigned int B=2;
}
</code></pre>
<p><strong>Variante Member variable:</strong><br />
<strong>Blub.h</strong></p>
<pre><code>#ifndef BLUB_H_
#define BLUB_H_

class Blub
{
public:
	static const unsigned int A;
	static const unsigned int B;
public:
	Blub();
	virtual ~Blub();
};

#endif /*BLUB_H_*/
</code></pre>
<p><strong>Blub.cpp</strong></p>
<pre><code>#include &quot;Blub.h&quot;
/*static*/ const unsigned int Blub::A=1;
/*static*/ const unsigned int Blub::B=2;
Blub::Blub()
{
}

Blub::~Blub()
{
}
</code></pre>
<p><strong>main.cpp</strong></p>
<pre><code>#include &lt;iostream&gt;
#include &quot;Blub.h&quot;
using namespace std;

int main() {
	unsigned int i = 2;
	switch(i)
	{
	case Blub::A:
		// aja a 
		break;
	case Blub::B:
		// aja b
		break;
	default:
		// no static member....
	}
	return 0;
}
</code></pre>
<blockquote>
<p>**** Build of configuration Debug for project Test ****</p>
<p>make all<br />
Building file: ../src/Blub.cpp<br />
Invoking: GCC C++ Compiler<br />
g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF&quot;src/Blub.d&quot; -MT&quot;src/Blub.d&quot; -o&quot;src/Blub.o&quot; &quot;../src/Blub.cpp&quot;<br />
Finished building: ../src/Blub.cpp</p>
<p>Building file: ../src/Test.cpp<br />
Invoking: GCC C++ Compiler<br />
g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF&quot;src/Test.d&quot; -MT&quot;src/Test.d&quot; -o&quot;src/Test.o&quot; &quot;../src/Test.cpp&quot;<br />
../src/Test.cpp: In function »int main()«:<br />
../src/Test.cpp:17: Fehler: »Blub::A« kann nicht in Konstanten-Ausdruck auftreten<br />
../src/Test.cpp:20: Fehler: »Blub::B« kann nicht in Konstanten-Ausdruck auftreten<br />
../src/Test.cpp:25: Fehler: expected primary-expression before »}« token<br />
../src/Test.cpp:25: Fehler: expected `;' before »}« token<br />
make: *** [src/Test.o] Fehler 1</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1505987</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1505987</guid><dc:creator><![CDATA[clemix]]></dc:creator><pubDate>Fri, 09 May 2008 10:04:02 GMT</pubDate></item><item><title><![CDATA[Reply to Benutzen von &amp;quot;static const&amp;quot; Members in einer Switch anweisung.... on Fri, 09 May 2008 10:53:33 GMT]]></title><description><![CDATA[<p>Compilerversion? (g++ -v)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1506021</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1506021</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Fri, 09 May 2008 10:53:33 GMT</pubDate></item><item><title><![CDATA[Reply to Benutzen von &amp;quot;static const&amp;quot; Members in einer Switch anweisung.... on Fri, 09 May 2008 11:08:03 GMT]]></title><description><![CDATA[<p>Da main.cpp nur Blup.h inkludiert, weiß es zwar das es sich um Konstanten handelt, kennt deren Werte aber nicht.<br />
Ich vermute mal da liegt das Problem.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1506033</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1506033</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Fri, 09 May 2008 11:08:03 GMT</pubDate></item><item><title><![CDATA[Reply to Benutzen von &amp;quot;static const&amp;quot; Members in einer Switch anweisung.... on Fri, 09 May 2008 11:20:40 GMT]]></title><description><![CDATA[<p>Nochmal EDIT (ich sollte mir angewöhnen, richtig zu lesen):</p>
<p>Im Namespace initialierst Du die Werte direkt. In der Klasse nicht. Warum? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1506040</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1506040</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Fri, 09 May 2008 11:20:40 GMT</pubDate></item><item><title><![CDATA[Reply to Benutzen von &amp;quot;static const&amp;quot; Members in einer Switch anweisung.... on Fri, 09 May 2008 13:44:01 GMT]]></title><description><![CDATA[<p>Compiler: g++ (GCC) 4.2.3</p>
<p>LordJaxom : Gute frage ich dachte man macht das mit statischen variablen so?!? Habs aber gerade getestet und siehe da es funzt auch so.<br />
Jetzt stelle ich mir die frage warum ich das nicht immer so gemacht habe?!? Gibt es da nen Grund warum man es generell noch in der *cpp datei initialieren sollte?</p>
<p>vorerst schonmal danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1506153</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1506153</guid><dc:creator><![CDATA[clemix]]></dc:creator><pubDate>Fri, 09 May 2008 13:44:01 GMT</pubDate></item><item><title><![CDATA[Reply to Benutzen von &amp;quot;static const&amp;quot; Members in einer Switch anweisung.... on Fri, 09 May 2008 14:43:07 GMT]]></title><description><![CDATA[<p>clemix schrieb:</p>
<blockquote>
<p>LordJaxom : Gute frage ich dachte man macht das mit statischen variablen so?!? Habs aber gerade getestet und siehe da es funzt auch so.<br />
Jetzt stelle ich mir die frage warum ich das nicht immer so gemacht habe?!? Gibt es da nen Grund warum man es generell noch in der *cpp datei initialieren sollte?</p>
</blockquote>
<p>Wenn Du statische integrale Konstanten in Klassen oder auf Namespaceebene (wie in Deinem funktionierenden Beispiel) definierst und initialisierst, werden sie als Compilezeit-Konstanten gehandelt. Sprich, sie werden während der Compilierung bereits durch ihre Werte ersetzt. Dann darfst Du sie auch in Switches benutzen.</p>
<p>Eine solche Konstante in der Klasse zu initialisieren bedeutet aber auch, dass Du sie in der .cpp-Datei nicht nochmals initialisieren solltest (darfst?). Ich glaube moderne Compiler warnen in diesem Fall sogar. Du musst sie in der .cpp-Datei sogar nichtmals mehr definieren, es seidenn Du brauchst irgendwo einmal die Adresse dieser Variablen (&amp;Blub::A).</p>
<p>Warum Du das nicht immer so gemacht hast? Der Grund könnte sein, dass ältere Compiler dieses Sprachfeature garnicht oder nicht korrekt unterstützt haben. Ich hoffe aber, dass die Zeiten dieser Compiler vorbei sind <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1506192</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1506192</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Fri, 09 May 2008 14:43:07 GMT</pubDate></item></channel></rss>