<?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[multiple definition meiner Klassenvariabel]]></title><description><![CDATA[<p>Hi Leute!<br />
Ich schreibe gerade ein kleines Programm, um mich an c++ umzugewöhnen.<br />
Es geht um Klassenvariabeln, und ich finde meinen Fehler einfach nicht.<br />
Aber ich wette, ich seh nur mal wieder den Wald vor lauter Bäumen nicht, und der Fehler wäre eigentlich ganz einfach zu finden.<br />
Und zwar bricht der Compiler das kompilieren meines Projekts ab und spuckt diese Fehler meldung aus:<br />
&quot; multiple definition of `Person::iAnzahl' &quot;<br />
Anmerkung Person ist meine Klasse und iAnzahl meine Klassenvariabel (= Anzahl aller Instanzen von Person).</p>
<p>Wie gesagt, fich finde meinen Fehler einfach nicht.<br />
Ich hab hier mal die Headerdatei, meine Klassendeklaration.<br />
Die ist eh das einzig wichtige:</p>
<pre><code class="language-cpp">class Person{
  int iSize, iWeight, iAge, iIQ;

  unsigned ID;
  public:
  static unsigned iAnzahl;    

  public:
  Person() : iSize(175), iWeight(70), iAge(25), iIQ(100)){ID = iAnzahl++;}
  Person(int size, int weight, int age, int IQ) : iSize(size), iWeight(weight), iAge(age), iIQ(IQ){ID = iAnzahl++;}
  ~Person() {iAnzahl--;}
  Person(const Person&amp; orig);
  void print();
  int getSize();
  int getWeight();
  int getAge();
  int getIQ();
  void increaseSize(int wert);
  unsigned getID(){return ID;};
  void setValues();
  Person&amp; operator= (const Person&amp; rS);
};
unsigned Person::iAnzahl = 0; //Definition außerhalb der Klasse ohne static
</code></pre>
<p>Es wäre wirklich super, wenn mir da jemand helfen könnte. <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/topic/171162/multiple-definition-meiner-klassenvariabel</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 08:12:26 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/171162.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 23 Jan 2007 02:08:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to multiple definition meiner Klassenvariabel on Tue, 23 Jan 2007 02:08:04 GMT]]></title><description><![CDATA[<p>Hi Leute!<br />
Ich schreibe gerade ein kleines Programm, um mich an c++ umzugewöhnen.<br />
Es geht um Klassenvariabeln, und ich finde meinen Fehler einfach nicht.<br />
Aber ich wette, ich seh nur mal wieder den Wald vor lauter Bäumen nicht, und der Fehler wäre eigentlich ganz einfach zu finden.<br />
Und zwar bricht der Compiler das kompilieren meines Projekts ab und spuckt diese Fehler meldung aus:<br />
&quot; multiple definition of `Person::iAnzahl' &quot;<br />
Anmerkung Person ist meine Klasse und iAnzahl meine Klassenvariabel (= Anzahl aller Instanzen von Person).</p>
<p>Wie gesagt, fich finde meinen Fehler einfach nicht.<br />
Ich hab hier mal die Headerdatei, meine Klassendeklaration.<br />
Die ist eh das einzig wichtige:</p>
<pre><code class="language-cpp">class Person{
  int iSize, iWeight, iAge, iIQ;

  unsigned ID;
  public:
  static unsigned iAnzahl;    

  public:
  Person() : iSize(175), iWeight(70), iAge(25), iIQ(100)){ID = iAnzahl++;}
  Person(int size, int weight, int age, int IQ) : iSize(size), iWeight(weight), iAge(age), iIQ(IQ){ID = iAnzahl++;}
  ~Person() {iAnzahl--;}
  Person(const Person&amp; orig);
  void print();
  int getSize();
  int getWeight();
  int getAge();
  int getIQ();
  void increaseSize(int wert);
  unsigned getID(){return ID;};
  void setValues();
  Person&amp; operator= (const Person&amp; rS);
};
unsigned Person::iAnzahl = 0; //Definition außerhalb der Klasse ohne static
</code></pre>
<p>Es wäre wirklich super, wenn mir da jemand helfen könnte. <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/1214892</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1214892</guid><dc:creator><![CDATA[Flabian]]></dc:creator><pubDate>Tue, 23 Jan 2007 02:08:04 GMT</pubDate></item><item><title><![CDATA[Reply to multiple definition meiner Klassenvariabel on Tue, 23 Jan 2007 05:41:21 GMT]]></title><description><![CDATA[<p>Ganz einfach: Die Definition von iAnzahl darf nicht in der Headerdatei stehen. Man definiert keine Variablen in Headerdateien. Die Definition muss in <em>eine</em> .cpp-Datei.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1214905</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1214905</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Tue, 23 Jan 2007 05:41:21 GMT</pubDate></item><item><title><![CDATA[Reply to multiple definition meiner Klassenvariabel on Tue, 23 Jan 2007 06:51:41 GMT]]></title><description><![CDATA[<p>Flabian schrieb:</p>
<blockquote>
<p>Hi Leute!<br />
Ich schreibe gerade ein kleines Programm, um mich an c++ umzugewöhnen.</p>
<pre><code class="language-cpp">class Person{
  public:
  Person() : iSize(175), iWeight(70), iAge(25), iIQ(100)){ID = iAnzahl++;}
  Person(int size, int weight, int age, int IQ) : iSize(size), iWeight(weight), iAge(age), iIQ(IQ){ID = iAnzahl++;}
};
</code></pre>
</blockquote>
<p>Wenn Du Dich schon an C++ gewöhnen willst, gewöhn Dir sowas gar nicht erst an. Sourcecode erbt nicht vom Telegramm, man muß nicht &quot;pro Zeile&quot; bezahlen. Viel wichtiger ist es, den Code übersichtlich zu gestallten.</p>
<p>z.B. so (oder so ähnlich)</p>
<pre><code class="language-cpp">class Person{
  public:
  Person() 
   : iSize(175)
   , iWeight(70)
   , iAge(25)
   , iIQ(100))
  {
     ID = iAnzahl++;
  }

  Person(int size, int weight, int age, int IQ) 
   : iSize(size)
   , iWeight(weight)
   , iAge(age)
   , iIQ(IQ)
  {
     ID = iAnzahl++;
  }
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1214914</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1214914</guid><dc:creator><![CDATA[klugscheisser]]></dc:creator><pubDate>Tue, 23 Jan 2007 06:51:41 GMT</pubDate></item><item><title><![CDATA[Reply to multiple definition meiner Klassenvariabel on Tue, 23 Jan 2007 13:15:21 GMT]]></title><description><![CDATA[<p>Ah, super, ihr seid genial!</p>
<p>Aus meinen Unterlagen, ging leider nicht hervor, dass die Definition innerhalb der .c Datei erfolgen muss.<br />
Da hätt ich ja noch ewig suchen können.</p>
<p>Und schöner strukturiert habe ich sie jetzt auch.</p>
<p>Vielen Dank für die super Hilfe! <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="🙂"
    /> <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="👍"
    /> <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="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1214943</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1214943</guid><dc:creator><![CDATA[Flabian]]></dc:creator><pubDate>Tue, 23 Jan 2007 13:15:21 GMT</pubDate></item><item><title><![CDATA[Reply to multiple definition meiner Klassenvariabel on Tue, 23 Jan 2007 07:50:31 GMT]]></title><description><![CDATA[<p>hmm, sollte das nicht eine .cpp Datei sein?</p>
<p>Und wuerde diese multiple Defintion nicht auch durch Include Guards verhindert? Resp wenn nicht wieso nicht? Und wenn nicht (und Fabian sie gesetzt hat) wieso hatte er dann keine multiple Definition der Klasse selbst?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1214949</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1214949</guid><dc:creator><![CDATA[Shinja]]></dc:creator><pubDate>Tue, 23 Jan 2007 07:50:31 GMT</pubDate></item><item><title><![CDATA[Reply to multiple definition meiner Klassenvariabel on Tue, 23 Jan 2007 07:54:43 GMT]]></title><description><![CDATA[<p>Shinja schrieb:</p>
<blockquote>
<p>Und wuerde diese multiple Defintion nicht auch durch Include Guards verhindert?</p>
</blockquote>
<p>Nein.</p>
<blockquote>
<p>Resp wenn nicht wieso nicht?</p>
</blockquote>
<p>Weil Include-Guards nur verhindern dass der <strong>Präprozessor</strong> innerhalb <strong>einer</strong> Übersetzungseinheit einen Header mehrfach einbindet. Sie verhindern nicht, dass der <strong>Compiler</strong> innerhalb <strong>mehrerer</strong> Übersetzungseinheiten dieselbe De<strong>fi</strong>nition vorfindet.</p>
<blockquote>
<p>Und wenn nicht (und Fabian sie gesetzt hat) wieso hatte er dann keine multiple Definition der Klasse selbst?</p>
</blockquote>
<p>Weil die Klasse im Header üblicherweise nur de<strong>kla</strong>riert wird. Und zwar dank Include-Guards in jeder ÜE genau einmal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1214952</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1214952</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 23 Jan 2007 07:54:43 GMT</pubDate></item><item><title><![CDATA[Reply to multiple definition meiner Klassenvariabel on Tue, 23 Jan 2007 07:54:37 GMT]]></title><description><![CDATA[<p>Shinja schrieb:</p>
<blockquote>
<p>Resp wenn nicht wieso nicht?</p>
</blockquote>
<p>Nein, wird sie nicht - Include-Guards verhindern nur das mehrfache Einbinden eines Headers in der selben Übersetzungseinheit. Der Linkerfehler tritt aber auf, weil der selbe Header in verschiedenen Übersetzungseinheiten eingebunden und übersetzt wurde.</p>
<blockquote>
<p>Und wenn nicht (und Fabian sie gesetzt hat) wieso hatte er dann keine multiple Definition der Klasse selbst?</p>
</blockquote>
<p>Klassendefinitionen werden etwas anders behandelt als Variablen-/Funktionsdefinitionen. Davon bleiben (vereinfacht ausgedrückt)für den Linker nur noch die Deklarationen der Memberfunktionen übrig - und mit mehrfachen Deklarationen hat er keine Probleme.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1214953</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1214953</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 23 Jan 2007 07:54:37 GMT</pubDate></item><item><title><![CDATA[Reply to multiple definition meiner Klassenvariabel on Tue, 23 Jan 2007 07:56:24 GMT]]></title><description><![CDATA[<p>&lt;OT&gt; <a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10318">@CStoll</a>: Wir sollten demnächst ausknobeln wer die Antwort gibt, sind ohnehin meist fast identisch <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> &lt;/OT&gt;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1214954</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1214954</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 23 Jan 2007 07:56:24 GMT</pubDate></item><item><title><![CDATA[Reply to multiple definition meiner Klassenvariabel on Tue, 23 Jan 2007 07:57:54 GMT]]></title><description><![CDATA[<p>Vielen Dank Lord Jaxom und CStoll.</p>
<p>btw: Bewundernswert wie jemand, der angeblich das Chaos bringt, so leicht Ordnung in nen Kopf reinbringen kann, hehe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1214955</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1214955</guid><dc:creator><![CDATA[Shinja]]></dc:creator><pubDate>Tue, 23 Jan 2007 07:57:54 GMT</pubDate></item><item><title><![CDATA[Reply to multiple definition meiner Klassenvariabel on Tue, 23 Jan 2007 08:04:42 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10648">@LordJaxom</a>: Hmm, darüber könnten wir mal nachdenken <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Shinja schrieb:</p>
<blockquote>
<p>btw: Bewundernswert wie jemand, der angeblich das Chaos bringt, so leicht Ordnung in nen Kopf reinbringen kann, hehe.</p>
</blockquote>
<p>Ich hab' nie gesagt, daß ich für das Chaos <em>verantwortlich</em> bin <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1214960</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1214960</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 23 Jan 2007 08:04:42 GMT</pubDate></item></channel></rss>