<?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[Vererbung (Fehlermeldung)]]></title><description><![CDATA[<p>Moin moin,</p>
<p>ich versuche eine Klasse CSpieler von der Klasse CCharacter erben zu lassen.<br />
Wenn ich es kompilieren will bekomme ich folgende Fehlermeldung:<br />
In constructor CSpieler::CSpieler():<br />
error: no matching function for call to CCharacter::CCharacter()<br />
note: candidates are: CCharacter::CCharacter(std::string)<br />
note: CCharacter::CCharacter(const CCharacter&amp;)</p>
<p>Hier der Quelltext:</p>
<p>CSpieler.h</p>
<pre><code class="language-cpp">#ifndef CSPIELER_H
#define CSPIELER_H

#include &quot;CCharacter.h&quot;

/*
            * *** Erbt von CCharacter *** *
*/

class CSpieler : public CCharacter
{
    public:
        // Membervariablen

        // Membermethoden
        CSpieler();
        virtual ~CSpieler();

};

#endif // CSPIELER_H
</code></pre>
<p>CSpieler.cpp</p>
<pre><code class="language-cpp">#include &quot;CSpieler.h&quot;
#include &quot;CCharacter.h&quot;
#include &lt;string.h&gt;
#include &lt;iostream&gt;

using namespace std;

CSpieler::CSpieler()
{

}

CSpieler::~CSpieler()
{
    //dtor
}
</code></pre>
<p>CCharacter.h</p>
<pre><code class="language-cpp">#ifndef CCHARACTER_H
#define CCHARACTER_H

#include &lt;string.h&gt;
#include &lt;iostream&gt;
using namespace std;

class CCharacter
{
    protected:
        // Membervariablen
        string m_Name;         // Name des Charakters
        int m_HealthyPoints;        // Energie (HP)

    public:
        // Membermethoden
        CCharacter(string name);    // Erweiterter Konstruktor für Namenseingabe
        virtual ~CCharacter();      // Std. Destruktor

        void setName(string name);
        void setHealthyPoints();
        string getName();
        int getHealthyPoints();

        void print();

};

#endif // CCHARACTER_H
</code></pre>
<p>CCharacter.cpp</p>
<pre><code class="language-cpp">#include &quot;CCharacter.h&quot;
#include &lt;iostream&gt;
#include &lt;string.h&gt;

using namespace std;

CCharacter::CCharacter(string name)
{
    // Standart-Werte initialisieren
    setName(name);
    setHealthyPoints();

}

void CCharacter::setName(string name)
{
    m_Name = name;
}

string CCharacter::getName()
{
    return m_Name;
}

void CCharacter::setHealthyPoints()
{
    m_HealthyPoints = 400;
}

int CCharacter::getHealthyPoints()
{
    return m_HealthyPoints;
}

void CCharacter::print()
{
    cout &lt;&lt; &quot;Name: &quot; &lt;&lt; m_Name &lt;&lt; endl;
    cout &lt;&lt; &quot;HP:   &quot; &lt;&lt; m_HealthyPoints &lt;&lt; endl;
}
</code></pre>
<p>habs auch schon versucht mit CSpieler::CSpieler() : CCharacter<br />
aber das hat auch nicht viel gebracht^^</p>
<p>Über Tipps wär ich sehr dankbar^^ Komme hier grade echt nicht weiter, weil ich auch irgendwie nicht verstehe was falsch sein soll... Hatte eigendlich nie Probleme bis ich versucht hab die Quellcodes in Header und Cpp Dateien aufzusplitten^^ <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>
]]></description><link>https://www.c-plusplus.net/forum/topic/285119/vererbung-fehlermeldung</link><generator>RSS for Node</generator><lastBuildDate>Fri, 21 Aug 2026 12:20:39 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/285119.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 14 Apr 2011 13:11:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Vererbung (Fehlermeldung) on Thu, 14 Apr 2011 13:13:34 GMT]]></title><description><![CDATA[<p>Moin moin,</p>
<p>ich versuche eine Klasse CSpieler von der Klasse CCharacter erben zu lassen.<br />
Wenn ich es kompilieren will bekomme ich folgende Fehlermeldung:<br />
In constructor CSpieler::CSpieler():<br />
error: no matching function for call to CCharacter::CCharacter()<br />
note: candidates are: CCharacter::CCharacter(std::string)<br />
note: CCharacter::CCharacter(const CCharacter&amp;)</p>
<p>Hier der Quelltext:</p>
<p>CSpieler.h</p>
<pre><code class="language-cpp">#ifndef CSPIELER_H
#define CSPIELER_H

#include &quot;CCharacter.h&quot;

/*
            * *** Erbt von CCharacter *** *
*/

class CSpieler : public CCharacter
{
    public:
        // Membervariablen

        // Membermethoden
        CSpieler();
        virtual ~CSpieler();

};

#endif // CSPIELER_H
</code></pre>
<p>CSpieler.cpp</p>
<pre><code class="language-cpp">#include &quot;CSpieler.h&quot;
#include &quot;CCharacter.h&quot;
#include &lt;string.h&gt;
#include &lt;iostream&gt;

using namespace std;

CSpieler::CSpieler()
{

}

CSpieler::~CSpieler()
{
    //dtor
}
</code></pre>
<p>CCharacter.h</p>
<pre><code class="language-cpp">#ifndef CCHARACTER_H
#define CCHARACTER_H

#include &lt;string.h&gt;
#include &lt;iostream&gt;
using namespace std;

class CCharacter
{
    protected:
        // Membervariablen
        string m_Name;         // Name des Charakters
        int m_HealthyPoints;        // Energie (HP)

    public:
        // Membermethoden
        CCharacter(string name);    // Erweiterter Konstruktor für Namenseingabe
        virtual ~CCharacter();      // Std. Destruktor

        void setName(string name);
        void setHealthyPoints();
        string getName();
        int getHealthyPoints();

        void print();

};

#endif // CCHARACTER_H
</code></pre>
<p>CCharacter.cpp</p>
<pre><code class="language-cpp">#include &quot;CCharacter.h&quot;
#include &lt;iostream&gt;
#include &lt;string.h&gt;

using namespace std;

CCharacter::CCharacter(string name)
{
    // Standart-Werte initialisieren
    setName(name);
    setHealthyPoints();

}

void CCharacter::setName(string name)
{
    m_Name = name;
}

string CCharacter::getName()
{
    return m_Name;
}

void CCharacter::setHealthyPoints()
{
    m_HealthyPoints = 400;
}

int CCharacter::getHealthyPoints()
{
    return m_HealthyPoints;
}

void CCharacter::print()
{
    cout &lt;&lt; &quot;Name: &quot; &lt;&lt; m_Name &lt;&lt; endl;
    cout &lt;&lt; &quot;HP:   &quot; &lt;&lt; m_HealthyPoints &lt;&lt; endl;
}
</code></pre>
<p>habs auch schon versucht mit CSpieler::CSpieler() : CCharacter<br />
aber das hat auch nicht viel gebracht^^</p>
<p>Über Tipps wär ich sehr dankbar^^ Komme hier grade echt nicht weiter, weil ich auch irgendwie nicht verstehe was falsch sein soll... Hatte eigendlich nie Probleme bis ich versucht hab die Quellcodes in Header und Cpp Dateien aufzusplitten^^ <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2049313</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2049313</guid><dc:creator><![CDATA[3tiXoz]]></dc:creator><pubDate>Thu, 14 Apr 2011 13:13:34 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung (Fehlermeldung) on Thu, 14 Apr 2011 13:22:02 GMT]]></title><description><![CDATA[<p>Du erbst von CCharacter. Die abgeleitete Klasse muss in ihrem ctor/vor ihrem ctor-Aufruf den ctor von CCharacter aufrufen. Normalerweise würde der default-ctor verwendet. Da Du aber in CCharacter einen neue ctor definiert hast, fällt der default-ctor weg. Übrig bleibt nur Dein ctor mit Argument string. Das Kann der Compiler aber nicht selbst aufrufen.</p>
<p>Lösungen:</p>
<ol>
<li>CCharacter einen Standard-ctor (:= ohne Argumente) verpassen</li>
<li>Den CCharacter-ctors im ctor der abgeleiteten Klasse aufrufen</li>
</ol>
]]></description><link>https://www.c-plusplus.net/forum/post/2049323</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2049323</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Thu, 14 Apr 2011 13:22:02 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung (Fehlermeldung) on Thu, 14 Apr 2011 13:27:52 GMT]]></title><description><![CDATA[<p>Die Idee der Klasse CCharacter einen STd. Konstruktor zu geben hatte ich auch shcon. Nur dann bekomme ich gleich 10 Errormeldungen^^</p>
<p>-&gt; undefined reference to 'vtable for CCharacter'<br />
-&gt; undefined reference to 'CCharacter::~CCharacter()'</p>
<p>und das ganze dann halt 10 mal...</p>
<p>Ausser ich verstehe das mit dem Std. Konstruktor falsch^^ Habe der Klasse CCharacter einfach jetzt die Zeilen:</p>
<pre><code class="language-cpp">CCharacter();
</code></pre>
<p>hinzugefügt</p>
<p>In der Cpp</p>
<pre><code class="language-cpp">CCharacter::CCharacter()
{
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2049328</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2049328</guid><dc:creator><![CDATA[3tiXoz]]></dc:creator><pubDate>Thu, 14 Apr 2011 13:27:52 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung (Fehlermeldung) on Thu, 14 Apr 2011 13:31:47 GMT]]></title><description><![CDATA[<p>nein du musst in der CSpielerklasse per initailisierungsliste den konstruktor von CCharacter aufrufen</p>
<pre><code class="language-cpp">CSpieler::CSpieler()
: CCharacter(&quot;lol&quot;)
{
   // ...
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2049329</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2049329</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Thu, 14 Apr 2011 13:31:47 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung (Fehlermeldung) on Thu, 14 Apr 2011 13:32:30 GMT]]></title><description><![CDATA[<p>Das liegt daran, dass du angibst, dass du einen eigenen Destruktor hast, diesen aber nirgends definierst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2049330</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2049330</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 14 Apr 2011 13:32:30 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung (Fehlermeldung) on Thu, 14 Apr 2011 14:27:42 GMT]]></title><description><![CDATA[<p>Nach dem löschen des Destruktors ging es <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>Alles klar Problem ist damit gelöst, danke für die Antworten <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/2049388</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2049388</guid><dc:creator><![CDATA[3tiXoz]]></dc:creator><pubDate>Thu, 14 Apr 2011 14:27:42 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung (Fehlermeldung) on Thu, 14 Apr 2011 14:38:51 GMT]]></title><description><![CDATA[<p>Obwohl ein Problem gibt es doch noch zum Thema Vererbung.</p>
<p>Klasse main.cpp</p>
<pre><code class="language-cpp">CSpieler spieler();
spieler.print();

return 0;
</code></pre>
<p>Durch die Vererbung sollte es doch jetzt möglich sein, die print()-Methode aus der Klasse CCharacter aufzurufen <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="😕"
    /> Nur leider schmeisst mein Compiler hier ein Fehler:</p>
<p>-&gt; error: request for member print in spieler which is of non-class type CSPieler()</p>
<p>Muss ich die print Methode jetzt überschreiben? Dann hätte doch die Vererbung hier garkeinen Sinn^^ Da ich ja (bis jetzt zumindest) noch keine anderen EIgenschaften habe die ich ausgeben möchte?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2049397</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2049397</guid><dc:creator><![CDATA[3tiXoz]]></dc:creator><pubDate>Thu, 14 Apr 2011 14:38:51 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung (Fehlermeldung) on Thu, 14 Apr 2011 14:52:25 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">CSpieler spieler();
</code></pre>
<p>Das ist eine Funktionsdeklaration.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2049405</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2049405</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 14 Apr 2011 14:52:25 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung (Fehlermeldung) on Thu, 14 Apr 2011 17:32:48 GMT]]></title><description><![CDATA[<p>Mh ja stimmt aber selbst wenn ich es so mache, meldet mein compiler den selben Fehler:</p>
<pre><code class="language-cpp">CCharacter *pSpieler;
pSpieler = new CSpieler;
pSpieler.print();

return 0;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2049514</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2049514</guid><dc:creator><![CDATA[3tiXoz]]></dc:creator><pubDate>Thu, 14 Apr 2011 17:32:48 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung (Fehlermeldung) on Thu, 14 Apr 2011 17:36:31 GMT]]></title><description><![CDATA[<p>Bestimmt nicht den selben, aber einen ähnlichen. Hier hast du kein Objekt, sondern einen Zeiger, den du erstmal dereferenzieren mußt (per <code>(*pSpieler).print();</code> oder <code>pSpieler-&gt;print();</code> ).</p>
<p>Aber was hindert dich daran, einfach eine lokale Variable anzulegen?</p>
<pre><code class="language-cpp">CSpieler spieler;
spieler.print();

return 0;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2049517</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2049517</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 14 Apr 2011 17:36:31 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung (Fehlermeldung) on Thu, 14 Apr 2011 17:46:16 GMT]]></title><description><![CDATA[<p>Nichts oO <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="😃"
    /> lol Ja doch jetzt geht es mit</p>
<p>CSpieler spieler;<br />
spieler.print();</p>
<p>Hab wohl zu lange mit Java programmert ohne was mit Cpp zwischendurch zu machen xD<br />
Denn ich muss bzw. kann ja auch CCharacter so initialisieren:</p>
<pre><code class="language-cpp">CCharacter character(&quot;Name&quot;);
character.print();
</code></pre>
<p>Nun dacht ich, wenn ich ein Objekt erzeuge ohne Patrameter muss zumindest die leere Angabe dabeistehen:</p>
<pre><code class="language-cpp">CCharacter character();
...
</code></pre>
<p>Bin es nämlich so gewohnt (von Java her):</p>
<pre><code class="language-java">CCharacter character = new CCharacter();
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2049526</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2049526</guid><dc:creator><![CDATA[3tiXoz]]></dc:creator><pubDate>Thu, 14 Apr 2011 17:46:16 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung (Fehlermeldung) on Thu, 14 Apr 2011 19:48:41 GMT]]></title><description><![CDATA[<p>Und wenn Du new benutzt, ist das auch in Ordnung. Wenn Du es nicht benutzt, aber eben nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2049596</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2049596</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Thu, 14 Apr 2011 19:48:41 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung (Fehlermeldung) on Thu, 14 Apr 2011 19:51:16 GMT]]></title><description><![CDATA[<p>So. Hoffe das ist jetzt alles so richtig^^ Wollte nur nochmal fragen ob das so &quot;richtiger&quot; Code ist^^ bzw. ob man das auch wirklich so schreiben würde^^ Gibt ja immer schönen und nicht so schönen Code^^</p>
<p>CCharacter.h:</p>
<pre><code class="language-cpp">// Konstruktoren
CCharacter();
CCharacter(string name);
</code></pre>
<p>CSpieler.h, erbt von CCharacter</p>
<pre><code class="language-cpp">CSpieler();
CSpieler(string name)
</code></pre>
<p>CCharacter.cpp</p>
<pre><code class="language-cpp">CCharacter::CCharacter() {}
CCharacter::CCharacter(string name)
{
   setName(name);
   set...
}
</code></pre>
<p>CSpieler.cpp</p>
<pre><code class="language-cpp">CSpieler::CSpieler() {}
CSpieler::CSpieler(string name) : CCharacter(name)
{

}
</code></pre>
<p>Brauche ich die leeren (standart?) Konstruktoren jetzt überhaupt?^^ Oder kann ich die auch einfach weg lassen? <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2049598</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2049598</guid><dc:creator><![CDATA[3tiXoz]]></dc:creator><pubDate>Thu, 14 Apr 2011 19:51:16 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung (Fehlermeldung) on Thu, 14 Apr 2011 20:05:41 GMT]]></title><description><![CDATA[<p>Prinzipiell ist es deine Entscheidung, ob du einen namenlosen Charakter bzw. Spieler zulassen willst. Wenn du sicher gehen willst, daß neue Figuren nur mit Name erzeugt werden können, lässt du sie weg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2049607</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2049607</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 14 Apr 2011 20:05:41 GMT</pubDate></item></channel></rss>