<?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 Variablen in Klassen-Templates möglich?]]></title><description><![CDATA[<p>Hallo,<br />
ich versuche ein Klassentemplate zu erstellen in dem es static-Eigenschaften geben soll, die in jedem Objekt verfügbar sind, egal von welchem Typ.</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
class AClass
{
  public:
  T value;
  static int AnzahlKlassenObjekte;

  AClass(T value_)
  {
    value = value_;
    AnzahlKlassenObjekte++;
  }

  T getValue()
  {
    return value;
  }

  static int getNum()
  {
    return AnzahlKlassenObjekte;
  }
};

int main()
{
  AClass&lt;int&gt; a(2);
  AClass&lt;double&gt; b(2.3);
  AClass&lt;char&gt; c('c');

  cout &lt;&lt; &quot;Klasse AClass wurde &quot; &lt;&lt; AClass::getNum() &lt;&lt; &quot;mal benutzt&quot; &lt;&lt; endl;
  return 0;
}
</code></pre>
<p>Dabei bekomm ich allerdings eine Fehlermeldung beim Kompilieren. Erstens lässt er mich nicht AClass::getNum() benutzen, sondern ich muss einen Typ angeben,<br />
z.B. AClass&lt;int&gt;::getNum(). Ich will aber eigentlich dass er in meinem Beispiel<br />
vom Typ unabhängig mitzählt wie oft AClass benutzt wurde.<br />
Und zweitens: selbst wenn ich AClass&lt;int&gt;::getNum() benutze bzw. wenn ich diese Zeile auskommentiere beschwert er sich in den Zeilen wo ich AnzahlKlassenObjekte inkrementiere, dass es eine &quot;undefined reference to 'AClass&lt;int&gt;::AnzahlKlassenObjekte' ist.</p>
<p>Weiss jemand Rat?<br />
Danke Uekue</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/180489/static-variablen-in-klassen-templates-möglich</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 20:33:31 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/180489.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 03 May 2007 12:35:49 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to static Variablen in Klassen-Templates möglich? on Thu, 03 May 2007 12:35:49 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich versuche ein Klassentemplate zu erstellen in dem es static-Eigenschaften geben soll, die in jedem Objekt verfügbar sind, egal von welchem Typ.</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
class AClass
{
  public:
  T value;
  static int AnzahlKlassenObjekte;

  AClass(T value_)
  {
    value = value_;
    AnzahlKlassenObjekte++;
  }

  T getValue()
  {
    return value;
  }

  static int getNum()
  {
    return AnzahlKlassenObjekte;
  }
};

int main()
{
  AClass&lt;int&gt; a(2);
  AClass&lt;double&gt; b(2.3);
  AClass&lt;char&gt; c('c');

  cout &lt;&lt; &quot;Klasse AClass wurde &quot; &lt;&lt; AClass::getNum() &lt;&lt; &quot;mal benutzt&quot; &lt;&lt; endl;
  return 0;
}
</code></pre>
<p>Dabei bekomm ich allerdings eine Fehlermeldung beim Kompilieren. Erstens lässt er mich nicht AClass::getNum() benutzen, sondern ich muss einen Typ angeben,<br />
z.B. AClass&lt;int&gt;::getNum(). Ich will aber eigentlich dass er in meinem Beispiel<br />
vom Typ unabhängig mitzählt wie oft AClass benutzt wurde.<br />
Und zweitens: selbst wenn ich AClass&lt;int&gt;::getNum() benutze bzw. wenn ich diese Zeile auskommentiere beschwert er sich in den Zeilen wo ich AnzahlKlassenObjekte inkrementiere, dass es eine &quot;undefined reference to 'AClass&lt;int&gt;::AnzahlKlassenObjekte' ist.</p>
<p>Weiss jemand Rat?<br />
Danke Uekue</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1278093</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1278093</guid><dc:creator><![CDATA[uekue]]></dc:creator><pubDate>Thu, 03 May 2007 12:35:49 GMT</pubDate></item><item><title><![CDATA[Reply to static Variablen in Klassen-Templates möglich? on Thu, 03 May 2007 12:47:48 GMT]]></title><description><![CDATA[<p>Erstens: Jede Ausprägung des Templates ist eine eigenständige Klasse und hat eigenständige Member (inklusive der statischen Elemente). Das heißt auch, daß die Member AClass&lt;int&gt;::AnzahlKlassenObjekte, AClass&lt;char&gt;::AnzahlKlassenObjekte etc. nichts miteinander zu tun haben. Wenn du wirklich eine statische Variable für ALLE Aclass-Spezialisierungen haben willst, mußt du sie aus der Klasse auslagern:</p>
<pre><code class="language-cpp">class Counter
{
  static int Anzahl;
public:
  Counter() {++Anzahl;}
  static int getNum() {return Anzahl;}
};

template&lt;typename T&gt;
class AClass : public Counter
{
  ...
};

...
AClass&lt;int&gt; a(0);
AClass&lt;char&gt; b('0');

cout&lt;&lt;&quot;Es gibt &quot;&lt;&lt;Counter::getNum() /*oder auch a.getNum()*/ &lt;&lt;&quot; Objekte&quot;;
</code></pre>
<p>Zweitens: Für Statische Member mußt du noch extra Speicherplatz anbieten, indem du einmalig ein <code>int Counter::Anzahl=0;</code> in dein Porgramm reinpackst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1278101</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1278101</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 03 May 2007 12:47:48 GMT</pubDate></item><item><title><![CDATA[Reply to static Variablen in Klassen-Templates möglich? on Thu, 03 May 2007 12:50:12 GMT]]></title><description><![CDATA[<p>Hi,<br />
Müll ( Thx CStoll )</p>
<blockquote>
<p>nd zweitens: selbst wenn ich AClass&lt;int&gt;::getNum() benutze bzw. wenn ich diese Zeile auskommentiere beschwert er sich in den Zeilen wo ich AnzahlKlassenObjekte inkrementiere, dass es eine &quot;undefined reference to 'AClass&lt;int&gt;::AnzahlKlassenObjekte' ist.</p>
</blockquote>
<p>Statische Elemente müssen auch noch definiert werden. Pack das einfach unter deine Klasse:</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
int AClass&lt;T&gt;::AnzahlKlassenObjekte = 0;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1278104</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1278104</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 03 May 2007 12:50:12 GMT</pubDate></item><item><title><![CDATA[Reply to static Variablen in Klassen-Templates möglich? on Thu, 03 May 2007 12:58:44 GMT]]></title><description><![CDATA[<p>KasF schrieb:</p>
<blockquote>
<p>Hi,<br />
Müll ( Thx CStoll )</p>
</blockquote>
<p>Nein, CStoll hat recht mit dem Basisklassencounter.</p>
<p>Der OP möchte dass sich _ALLE_ Templateinstanzen den Counter teilen.</p>
<p>Grüsse</p>
<p>*this</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1278108</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1278108</guid><dc:creator><![CDATA[Gast++]]></dc:creator><pubDate>Thu, 03 May 2007 12:58:44 GMT</pubDate></item><item><title><![CDATA[Reply to static Variablen in Klassen-Templates möglich? on Thu, 03 May 2007 13:00:52 GMT]]></title><description><![CDATA[<p>Wenn er unrecht hätte, hätte ich nicht Thx geschrieben <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="🙂"
    /><br />
Ich hatte da Müll stehen <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="😉"
    /> Ist mir eingefallen als ich CStolls Post gelesen haben ( gut das das keiner gesehen hat *OmanOman* )</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1278109</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1278109</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 03 May 2007 13:00:52 GMT</pubDate></item><item><title><![CDATA[Reply to static Variablen in Klassen-Templates möglich? on Thu, 03 May 2007 14:19:34 GMT]]></title><description><![CDATA[<p>Perfekt, danke!<br />
Habs jetzt mit ner Hilfsklasse gemacht und dann braucht man wirklich noch die explizite Deklaration! Aber jetzt gehts!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1278148</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1278148</guid><dc:creator><![CDATA[uekue]]></dc:creator><pubDate>Thu, 03 May 2007 14:19:34 GMT</pubDate></item></channel></rss>