<?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[static member-variable im header initialisieren?!]]></title><description><![CDATA[<p>hallo!</p>
<p>ich habe eine klasse, die durch und durch static ist, sprich static methoden und members.<br />
da ich aus layout gründen diese kleine klasse rein im header implementiert habe, gibt es nun ein problem mit der initialisierung der static members.<br />
normalerweise macht man dies ja im cpp-file, aber dies möchte ich &quot;umgehen&quot;, ist das im header möglich?<br />
falls ja, wie?</p>
<p>thx, lg.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/208280/static-member-variable-im-header-initialisieren</link><generator>RSS for Node</generator><lastBuildDate>Sun, 11 Oct 2026 19:37:23 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/208280.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 17 Mar 2008 09:08:50 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to static member-variable im header initialisieren?! on Mon, 17 Mar 2008 09:08:50 GMT]]></title><description><![CDATA[<p>hallo!</p>
<p>ich habe eine klasse, die durch und durch static ist, sprich static methoden und members.<br />
da ich aus layout gründen diese kleine klasse rein im header implementiert habe, gibt es nun ein problem mit der initialisierung der static members.<br />
normalerweise macht man dies ja im cpp-file, aber dies möchte ich &quot;umgehen&quot;, ist das im header möglich?<br />
falls ja, wie?</p>
<p>thx, lg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1475639</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1475639</guid><dc:creator><![CDATA[taff]]></dc:creator><pubDate>Mon, 17 Mar 2008 09:08:50 GMT</pubDate></item><item><title><![CDATA[Reply to static member-variable im header initialisieren?! on Mon, 17 Mar 2008 09:19:52 GMT]]></title><description><![CDATA[<p>warum nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1475647</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1475647</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Mon, 17 Mar 2008 09:19:52 GMT</pubDate></item><item><title><![CDATA[Reply to static member-variable im header initialisieren?! on Mon, 17 Mar 2008 09:31:06 GMT]]></title><description><![CDATA[<p>Rein aus dem Bauch heraus würde ich sagen: Nein, es ist nicht möglich. Du musst die Variable ja irgendwo definieren, wenn du das im Header tust, ist sie in jeder Übersetzungseinheit drin, was Konflikte gibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1475656</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1475656</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Mon, 17 Mar 2008 09:31:06 GMT</pubDate></item><item><title><![CDATA[Reply to static member-variable im header initialisieren?! on Mon, 17 Mar 2008 09:37:53 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">class statictest
{
private:
	static int a;
	static int b;
public:
		statictest() {}
		~statictest() {}

		static int dblA(){return a*2;}
		static void prt(){cout &lt;&lt; a &lt;&lt; ' ' &lt;&lt; b &lt;&lt; endl;}

};

int statictest::a = 5;
int statictest::b = 2;
</code></pre>
<p>erzeugt beim linken dann folgende errors:</p>
<pre><code>./obj/testclass1.o: (.data+0x0): multiple definition of `statictest::a'
./obj/testclass2.o: (.data+0x0): first defined here
./obj/testclass1.o: (.data+0x4): multiple definition of `statictest::b'
./obj/testclass2.o: (.data+0x4): first defined here
./obj/testclass2.o: (.data+0x0): multiple definition of `statictest::a'
./obj/testclass2.o: (.data+0x0): first defined here
./obj/testclass2.o: (.data+0x4): multiple definition of `statictest::b'
./obj/testclass2.o: (.data+0x4): first defined here
./obj/functions.o: (.data+0x0): multiple definition of `statictest::a'
./obj/testclass2.o: (.data+0x0): first defined here
./obj/functions.o: (.data+0x4): multiple definition of `statictest::b'
</code></pre>
<p>aber kann ich dem compiler nicht sagen, dass ich im header diese initialisierung nur einmal haben möchte?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1475659</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1475659</guid><dc:creator><![CDATA[taff]]></dc:creator><pubDate>Mon, 17 Mar 2008 09:37:53 GMT</pubDate></item><item><title><![CDATA[Reply to static member-variable im header initialisieren?! on Mon, 17 Mar 2008 09:48:24 GMT]]></title><description><![CDATA[<p>Nein, das geht nicht. Du könntest die Klasse höchstens zu einem Template machen, dann wird das mit der ODR etwas freier gehandhabt IIRC. Aber das wäre einfach grober Unfug, wenn die Klasse kein Template sein muss.<br />
Warum machst du es nicht einfach, wie es sich gehört in eine statictest.cpp-Datei?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1475667</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1475667</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Mon, 17 Mar 2008 09:48:24 GMT</pubDate></item><item><title><![CDATA[Reply to static member-variable im header initialisieren?! on Mon, 17 Mar 2008 09:53:39 GMT]]></title><description><![CDATA[<p>es gibt hier einen einfachen grund.<br />
das makefile muss sich bei uns jeder in der firma selbst verwalten und wenn man dann so &quot;hilfsklassen&quot; für sich und die anderen bastelt, hätte eine reine header-datei den vorteil, dass man diese nur inkludieren, aber nicht ins makefile einpflegen muss.<br />
oder ist eine hilfsklasse von einer anderen abhängig, dann muss man diese file ja auch im makefile angeben werden und das alles wäre eben gelöst, AUßER man verwendet static members, dann hat man ein ordentliches problem.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1475669</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1475669</guid><dc:creator><![CDATA[taff]]></dc:creator><pubDate>Mon, 17 Mar 2008 09:53:39 GMT</pubDate></item><item><title><![CDATA[Reply to static member-variable im header initialisieren?! on Mon, 17 Mar 2008 10:20:34 GMT]]></title><description><![CDATA[<p>Dumme Frage von mir, aber sollte das nicht durch einen Include-Guard behoben werden?</p>
<pre><code class="language-cpp">#ifndef _H_XYZ_GUARD__
#define _H_XYZ_GUARD__

// Klasse

// Statische Variablen

#endif
</code></pre>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1475683</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1475683</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Mon, 17 Mar 2008 10:20:34 GMT</pubDate></item><item><title><![CDATA[Reply to static member-variable im header initialisieren?! on Mon, 17 Mar 2008 10:25:24 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>Dumme Frage von mir, aber sollte das nicht durch einen Include-Guard behoben werden?</p>
</blockquote>
<p>Nene, damit wird ja nur verhindert, dass die Header-Datei mehrfach in einer Cpp-Datei eingebunden wird. Aber das Problem ist ja, dass die Headerdatei in verschiedenen Cpps eingebunden wird; bzw das ist eigentlich kein Problem, sondern dass in jeder Cpp-Datei dann schlussendlich die Definition der statischen Variable landet <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/1475687</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1475687</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Mon, 17 Mar 2008 10:25:24 GMT</pubDate></item><item><title><![CDATA[Reply to static member-variable im header initialisieren?! on Mon, 17 Mar 2008 10:38:57 GMT]]></title><description><![CDATA[<p>Sofern die const sind, kannst du die Dekleration in der Klasse machen:</p>
<pre><code class="language-cpp">class statictest
{
private:
    static const int a = 5;
    static const int b = 2;
public:
        statictest() {}
        ~statictest() {}

        static int dblA(){return a*2;}
        static void prt(){cout &lt;&lt; a &lt;&lt; ' ' &lt;&lt; b &lt;&lt; endl;}

};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1475691</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1475691</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Mon, 17 Mar 2008 10:38:57 GMT</pubDate></item><item><title><![CDATA[Reply to static member-variable im header initialisieren?! on Mon, 17 Mar 2008 10:48:12 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>Sofern die const sind, kannst du die Dekleration in der Klasse machen:</p>
</blockquote>
<p>die idee hatte ich auch schon bzw. hat mich das npos vom stl-string auf die idee gebracht, aber da ich leider auch zur laufzeit die werte ändern muss... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1475702</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1475702</guid><dc:creator><![CDATA[taff]]></dc:creator><pubDate>Mon, 17 Mar 2008 10:48:12 GMT</pubDate></item><item><title><![CDATA[Reply to static member-variable im header initialisieren?! on Mon, 17 Mar 2008 11:10:28 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>Dravere schrieb:</p>
<blockquote>
<p>Dumme Frage von mir, aber sollte das nicht durch einen Include-Guard behoben werden?</p>
</blockquote>
<p>Nene, damit wird ja nur verhindert, dass die Header-Datei mehrfach in einer Cpp-Datei eingebunden wird. Aber das Problem ist ja, dass die Headerdatei in verschiedenen Cpps eingebunden wird; bzw das ist eigentlich kein Problem, sondern dass in jeder Cpp-Datei dann schlussendlich die Definition der statischen Variable landet <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>
</blockquote>
<p>Ach stimmt ja ... mist</p>
<p>Naja, wenn die static Variablen nicht Konstant sind, dann gebe es natürlich die Möglichkeit, dass du manuell eine Funktion für die Initialisierung aufrufst.</p>
<pre><code class="language-cpp">class XYZ
{
public:
    static void init_class();
};
</code></pre>
<p>Oder du machst die Klasse als Singleton, meiner Meinung nach hier die Beste Lösung, wenn du auf das .cpp verzichten möchtest.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1475718</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1475718</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Mon, 17 Mar 2008 11:10:28 GMT</pubDate></item><item><title><![CDATA[Reply to static member-variable im header initialisieren?! on Mon, 17 Mar 2008 12:05:02 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>Naja, wenn die static Variablen nicht Konstant sind, dann gebe es natürlich die Möglichkeit, dass du manuell eine Funktion für die Initialisierung aufrufst.</p>
<pre><code class="language-cpp">class XYZ
{
public:
    static void init_class();
};
</code></pre>
</blockquote>
<p>geht so leider auch nicht, weil man die static members als eine art globale variable im cpp-file eigentlich anlegen muss.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1475777</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1475777</guid><dc:creator><![CDATA[taff]]></dc:creator><pubDate>Mon, 17 Mar 2008 12:05:02 GMT</pubDate></item><item><title><![CDATA[Reply to static member-variable im header initialisieren?! on Mon, 17 Mar 2008 12:15:44 GMT]]></title><description><![CDATA[<p>wenn der berg nicht zum propheten kommt, dann...</p>
<p>verzichte auf die variablen!</p>
<pre><code class="language-cpp">class HeaderOnly
{
    static int&amp; m_a () { static int a_; return a_; }
    static int&amp; m_b () { static int b_; return b_; }

public:
    static int dblA(){return m_a()*2;}
    static void prt() {cout &lt;&lt; m_a() &lt;&lt; ' ' &lt;&lt; m_b() &lt;&lt; endl;}
};
</code></pre>
<p>oder tu dir die arbeit mit dem makefile an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1475782</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1475782</guid><dc:creator><![CDATA[queer_boy]]></dc:creator><pubDate>Mon, 17 Mar 2008 12:15:44 GMT</pubDate></item><item><title><![CDATA[Reply to static member-variable im header initialisieren?! on Mon, 17 Mar 2008 12:32:27 GMT]]></title><description><![CDATA[<p>DANKE <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /><br />
ja das ist die lösung für das problem, weil in m_a() kann ich auch die variablen initialisieren.</p>
<p>sollte man bei dieser lösung noch überlegungen anstellen bzgl. performance gegenüber einer &quot;normalen&quot; static-member lösung oder wird das eher nicht ins gewicht fallen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1475805</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1475805</guid><dc:creator><![CDATA[taff]]></dc:creator><pubDate>Mon, 17 Mar 2008 12:32:27 GMT</pubDate></item><item><title><![CDATA[Reply to static member-variable im header initialisieren?! on Mon, 17 Mar 2008 12:47:14 GMT]]></title><description><![CDATA[<p>War da nicht was mit inline Funktionen und static membern in verschiedenen Ueberseztungseinheiten? Mir ist da irgendwas im Gedaechtnis, dass bei inline Funktionen fuer jede Uebersetzungseinheit eigene statische variablen angelegt werden, so dass m_a nicht immer auf die selbe Variable a_ referenziert. Angabe ohne Gewaehr, vielleicht weiss da jemand genaueres...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1475815</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1475815</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 17 Mar 2008 12:47:14 GMT</pubDate></item><item><title><![CDATA[Reply to static member-variable im header initialisieren?! on Mon, 17 Mar 2008 14:16:18 GMT]]></title><description><![CDATA[<p>es ist sichergestellt, dass statische variablen in inline-funktionen immer auf dasselbe objekt verweisen.</p>
<p>die ausnahme wäre, wenn die funktion interal linkage hätte, was normalerweise bei <code>static</code> -funktionen auch der fall wäre, aber nur, wenn sie nicht im klassenscope deklariert werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1475888</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1475888</guid><dc:creator><![CDATA[queer_boy]]></dc:creator><pubDate>Mon, 17 Mar 2008 14:16:18 GMT</pubDate></item><item><title><![CDATA[Reply to static member-variable im header initialisieren?! on Mon, 17 Mar 2008 20:11:48 GMT]]></title><description><![CDATA[<p>queer_boy schrieb:</p>
<blockquote>
<p>es ist sichergestellt, dass statische variablen in inline-funktionen immer auf dasselbe objekt verweisen.</p>
</blockquote>
<p>Jedoch siehts bei static membern in verschiedenen Übersetzungseinheiten anders aus. Genau wie bei gloables Variablen, ist auch hier die Initalisierungsreihenfolge nicht definiert.</p>
<p>Edit: Uups, darüber redet ihr ja gar nicht <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/1476177</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1476177</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 17 Mar 2008 20:11:48 GMT</pubDate></item></channel></rss>