<?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 of &amp;quot;Klasse::anzahl&amp;quot; und andere Probleme ...]]></title><description><![CDATA[<p>Hallo!<br />
Ich habe folgende Klasse:</p>
<pre><code class="language-cpp">class Klasse
{
public:
	Klasse(const char* s) { ++anzahl; }
	Klasse(const Klasse&amp; k) { ++anzahl; }
	virtual ~Klasse() { --anzahl; }
private:
	static size_t anzahl;
};

size_t Klasse::anzahl = 0;
</code></pre>
<p>Diese Klasse wird noch vererbt:</p>
<pre><code class="language-cpp">class Abgeleitet : public Klasse
{
public:
	Abgeleitet() : Klasse(&quot;bla&quot;) {}
	Abgeleitet(const Abgeleitet&amp; ab) { machwas; }
};
</code></pre>
<p>Nun bekomm ich folgende Fehlermeldungen:</p>
<pre><code>multiple definition of 'Klasse::anzahl'
</code></pre>
<p>(am Ende von main als Haltepunkt)</p>
<p>Und bei der zweiten Klasse:</p>
<pre><code>Keine passende Funktion fuer Aufruf Klasse::Klasse()
</code></pre>
<p>(beim Kopierkonstruktor von Abgeleitet)</p>
<p>Was fuer Definitionen von anzahl? Es gibt doch nur eine ...<br />
Wieso wird denn nicht der Kopierkonstruktor von Klasse automatisch aufgerufen und versucht einen Standardkonstruktor von Klasse zu finden?</p>
<p>Gruss<br />
Cartman</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/238294/multiple-definition-of-quot-klasse-anzahl-quot-und-andere-probleme</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 03:26:45 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/238294.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 08 Apr 2009 19:39:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to multiple definition of &amp;quot;Klasse::anzahl&amp;quot; und andere Probleme ... on Wed, 08 Apr 2009 19:39:04 GMT]]></title><description><![CDATA[<p>Hallo!<br />
Ich habe folgende Klasse:</p>
<pre><code class="language-cpp">class Klasse
{
public:
	Klasse(const char* s) { ++anzahl; }
	Klasse(const Klasse&amp; k) { ++anzahl; }
	virtual ~Klasse() { --anzahl; }
private:
	static size_t anzahl;
};

size_t Klasse::anzahl = 0;
</code></pre>
<p>Diese Klasse wird noch vererbt:</p>
<pre><code class="language-cpp">class Abgeleitet : public Klasse
{
public:
	Abgeleitet() : Klasse(&quot;bla&quot;) {}
	Abgeleitet(const Abgeleitet&amp; ab) { machwas; }
};
</code></pre>
<p>Nun bekomm ich folgende Fehlermeldungen:</p>
<pre><code>multiple definition of 'Klasse::anzahl'
</code></pre>
<p>(am Ende von main als Haltepunkt)</p>
<p>Und bei der zweiten Klasse:</p>
<pre><code>Keine passende Funktion fuer Aufruf Klasse::Klasse()
</code></pre>
<p>(beim Kopierkonstruktor von Abgeleitet)</p>
<p>Was fuer Definitionen von anzahl? Es gibt doch nur eine ...<br />
Wieso wird denn nicht der Kopierkonstruktor von Klasse automatisch aufgerufen und versucht einen Standardkonstruktor von Klasse zu finden?</p>
<p>Gruss<br />
Cartman</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1693103</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1693103</guid><dc:creator><![CDATA[Eric Cartman]]></dc:creator><pubDate>Wed, 08 Apr 2009 19:39:04 GMT</pubDate></item><item><title><![CDATA[Reply to multiple definition of &amp;quot;Klasse::anzahl&amp;quot; und andere Probleme ... on Wed, 08 Apr 2009 19:59:53 GMT]]></title><description><![CDATA[<p>Eric Cartman schrieb:</p>
<blockquote>
<p>Nun bekomm ich folgende Fehlermeldungen:</p>
<pre><code>multiple definition of 'Klasse::anzahl'
</code></pre>
<p>(am Ende von main als Haltepunkt)</p>
</blockquote>
<p>Du solltest die Definition der Variable in eine .cpp-Datei verlagern.</p>
<p>Eric Cartman schrieb:</p>
<blockquote>
<p>Und bei der zweiten Klasse:</p>
<pre><code>Keine passende Funktion fuer Aufruf Klasse::Klasse()
</code></pre>
<p>(beim Kopierkonstruktor von Abgeleitet)</p>
</blockquote>
<p>Hm... Schreib den Basisklassenkopierkonstruktoraufruf (;)) mal ausdrücklich hin...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1693115</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1693115</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 08 Apr 2009 19:59:53 GMT</pubDate></item><item><title><![CDATA[Reply to multiple definition of &amp;quot;Klasse::anzahl&amp;quot; und andere Probleme ... on Wed, 08 Apr 2009 20:01:06 GMT]]></title><description><![CDATA[<p>Eric Cartman schrieb:</p>
<blockquote>
<p>Nun bekomm ich folgende Fehlermeldungen:</p>
<pre><code>multiple definition of 'Klasse::anzahl'
</code></pre>
<p>(am Ende von main als Haltepunkt)[/cpp]</p>
</blockquote>
<p>Wenn du die Definition im header stehen hast und den merhmals einbindest dann hast du in jeder Übersetzungseinheit wo du den Header einbindest die Definition stehen. Das mag der Linker nicht. Pack die Definition in die .cpp</p>
<blockquote>
<p>Und bei der zweiten Klasse:</p>
<pre><code>Keine passende Funktion fuer Aufruf Klasse::Klasse()
</code></pre>
<p>(beim Kopierkonstruktor von Abgeleitet)</p>
<p>Wieso wird denn nicht der Kopierkonstruktor von Klasse automatisch aufgerufen und versucht einen Standardkonstruktor von Klasse zu finden?</p>
</blockquote>
<p>Weil der Kopierkonstruktor von Klasse nur in den automatisch generierten Kopierkonstruktor eingebaut wird. Bei normalen Copy-Ctors musst du ihn selbst aufrufen:</p>
<pre><code class="language-cpp">Abgeleitet(const Abgeleitet&amp; ab) : Klasse(ab) { machwas; }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1693117</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1693117</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 08 Apr 2009 20:01:06 GMT</pubDate></item><item><title><![CDATA[Reply to multiple definition of &amp;quot;Klasse::anzahl&amp;quot; und andere Probleme ... on Wed, 08 Apr 2009 20:01:55 GMT]]></title><description><![CDATA[<p>Konnte das erste Problem loesen. In Der abgeleiteten Klasse hatte ich ebenfalls eine (private) size_t Variable mit dem Namen &quot;anzahl&quot; - verstehe den Fehler aber trotzdem nicht ...</p>
<p>Zur zweiten Sache: Ja das finde ich eben auch etwas merkwuerdig... Wie kann ich denn den Basisklassen-Kopierkonstruktor &quot;ausdruecklich hin schreiben&quot;? Ich meine, wie greife ich auf das Basisklassensubobjekt in der abgeleiteten Klasse?</p>
<p>Gruss<br />
Cartman</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1693118</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1693118</guid><dc:creator><![CDATA[Eric Cartman]]></dc:creator><pubDate>Wed, 08 Apr 2009 20:01:55 GMT</pubDate></item><item><title><![CDATA[Reply to multiple definition of &amp;quot;Klasse::anzahl&amp;quot; und andere Probleme ... on Wed, 08 Apr 2009 20:04:45 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/27344">@cartman</a>: siehe meine erklärungen <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="😉"
    /><br />
Du kannst den Basis-Ctor wie von mir beschrieben mit dem abgeleiteten Objekt aufrufen, so wie man bei anderen Funktionen auch ein abgeleitetes Objekt an Stelle der Basis einsetzen kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1693120</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1693120</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 08 Apr 2009 20:04:45 GMT</pubDate></item><item><title><![CDATA[Reply to multiple definition of &amp;quot;Klasse::anzahl&amp;quot; und andere Probleme ... on Wed, 08 Apr 2009 20:08:04 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>Eric Cartman schrieb:</p>
<blockquote>
<p>Nun bekomm ich folgende Fehlermeldungen:</p>
<pre><code>multiple definition of 'Klasse::anzahl'
</code></pre>
<p>(am Ende von main als Haltepunkt)[/cpp]</p>
</blockquote>
<p>Wenn du die Definition im header stehen hast und den merhmals einbindest dann hast du in jeder Übersetzungseinheit wo du den Header einbindest die Definition stehen. Das mag der Linker nicht. Pack die Definition in die .cpp</p>
<blockquote>
<p>Und bei der zweiten Klasse:</p>
<pre><code>Keine passende Funktion fuer Aufruf Klasse::Klasse()
</code></pre>
<p>(beim Kopierkonstruktor von Abgeleitet)</p>
<p>Wieso wird denn nicht der Kopierkonstruktor von Klasse automatisch aufgerufen und versucht einen Standardkonstruktor von Klasse zu finden?</p>
</blockquote>
<p>Weil der Kopierkonstruktor von Klasse nur in den automatisch generierten Kopierkonstruktor eingebaut wird. Bei normalen Copy-Ctors musst du ihn selbst aufrufen:</p>
<pre><code class="language-cpp">Abgeleitet(const Abgeleitet&amp; ab) : Klasse(ab) { machwas; }
</code></pre>
</blockquote>
<p>Danke, jetzt klappt alles <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>
<p>Der erste Fehler war trotzdem noch da, also hatte ich mich zu frueh gefreut. Der Fehler liess sich aber wie du und Nexus bereits gesagt habt bereinigen, indem ich die static-Variable in der CPP-Datei definiert hab.</p>
<p>gruss<br />
Cartman</p>
<p>edit: aber warum wird die Variable mehrmals definiert, wenn sie in der Header-Datei steht? ich hab doch die Praeprozessor-Direktiven #ifndef etc. benutzt...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1693121</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1693121</guid><dc:creator><![CDATA[Eric Cartman]]></dc:creator><pubDate>Wed, 08 Apr 2009 20:08:04 GMT</pubDate></item><item><title><![CDATA[Reply to multiple definition of &amp;quot;Klasse::anzahl&amp;quot; und andere Probleme ... on Wed, 08 Apr 2009 20:14:57 GMT]]></title><description><![CDATA[<p>Eric Cartman schrieb:</p>
<blockquote>
<p>edit: aber warum wird die Variable mehrmals definiert, wenn sie in der Header-Datei steht? ich hab doch die Praeprozessor-Direktiven #ifndef etc. benutzt...</p>
</blockquote>
<p>Das Problem liegt beim Linker. Jedes Modul, das die Definition einbindet, hat anschliessend in der kompilierten .obj-Datei eine eigene Definition. Beim Verknüpfen der Objektdateien existieren dann mehrere Definitionen, was zu dem Fehler führt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1693126</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1693126</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 08 Apr 2009 20:14:57 GMT</pubDate></item><item><title><![CDATA[Reply to multiple definition of &amp;quot;Klasse::anzahl&amp;quot; und andere Probleme ... on Wed, 08 Apr 2009 20:20:02 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Eric Cartman schrieb:</p>
<blockquote>
<p>edit: aber warum wird die Variable mehrmals definiert, wenn sie in der Header-Datei steht? ich hab doch die Praeprozessor-Direktiven #ifndef etc. benutzt...</p>
</blockquote>
<p>Das Problem liegt beim Linker. Jedes Modul, das die Definition einbindet, hat anschliessend in der kompilierten .obj-Datei eine eigene Definition. Beim Verknüpfen der Objektdateien existieren dann mehrere Definitionen, was zu dem Fehler führt.</p>
</blockquote>
<p>Verstehe, danke fuer die Erklaerung <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>
<p>gruss<br />
Cartman</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1693129</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1693129</guid><dc:creator><![CDATA[Eric Cartman]]></dc:creator><pubDate>Wed, 08 Apr 2009 20:20:02 GMT</pubDate></item></channel></rss>