<?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[Funktion der abgeleiteten Klasse innerhalb der Basisklasse aufrufen?]]></title><description><![CDATA[<p>Hi,</p>
<p>ich möchte innerhalb meiner Basisklasse eine Funktion der von der Basisklasse abgeleiteten Funktion aufrufen, sobald ich aber den Header mit der Klassendeklaration der abgeleiteten Klasse in die Basisklasse inkludieren möchte, wirft mir der VC Compiler folgenden Fehler:</p>
<pre><code>'IoBase': Basisklasse undefiniert
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/192579/funktion-der-abgeleiteten-klasse-innerhalb-der-basisklasse-aufrufen</link><generator>RSS for Node</generator><lastBuildDate>Sun, 27 Sep 2026 12:56:24 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/192579.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 16 Sep 2007 14:00:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Funktion der abgeleiteten Klasse innerhalb der Basisklasse aufrufen? on Sun, 16 Sep 2007 14:00:35 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich möchte innerhalb meiner Basisklasse eine Funktion der von der Basisklasse abgeleiteten Funktion aufrufen, sobald ich aber den Header mit der Klassendeklaration der abgeleiteten Klasse in die Basisklasse inkludieren möchte, wirft mir der VC Compiler folgenden Fehler:</p>
<pre><code>'IoBase': Basisklasse undefiniert
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1366356</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1366356</guid><dc:creator><![CDATA[Fragender2]]></dc:creator><pubDate>Sun, 16 Sep 2007 14:00:35 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion der abgeleiteten Klasse innerhalb der Basisklasse aufrufen? on Sun, 16 Sep 2007 14:15:29 GMT]]></title><description><![CDATA[<p>Wie willst du eine Methode aufrufen, die es in deiner Basisklasse garnicht gibt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1366366</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1366366</guid><dc:creator><![CDATA[this-*gt*that]]></dc:creator><pubDate>Sun, 16 Sep 2007 14:15:29 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion der abgeleiteten Klasse innerhalb der Basisklasse aufrufen? on Sun, 16 Sep 2007 14:29:20 GMT]]></title><description><![CDATA[<p>Richtig, die Methode existiert nur in der abgeleiteten Klasse. Folgendes funktioniert aber nicht:</p>
<p>Basisklasse.h</p>
<pre><code class="language-cpp">#ifndef _BASISKLASSE_H_
#define _BASISKLASSE_H_

#include &lt;iostream&gt;

// Wenn du den folgenden Include und alle anderen, relevanten Aufrufe auskommentierst,
// verschwinden die Fehlermeldungen.
#include &quot;AbgelKlasse.h&quot;

class Basisklasse
{
	private:
		AbgelKlasse derived;

	public:
		void RufeDerivedFuncAuf ();
};

#endif
</code></pre>
<p>Basisklasse.cpp</p>
<pre><code class="language-cpp">#include &quot;Basisklasse.h&quot;

void Basisklasse :: RufeDerivedFuncAuf ()
{
	derived.TestFunc (); 
}
</code></pre>
<p>AbgelKlasse.h</p>
<pre><code class="language-cpp">#ifndef _ABGELKLASSE_H_
#define _ABGELKLASSE_H_

#include &quot;Basisklasse.h&quot;

class AbgelKlasse : public Basisklasse
{
	public:
		void TestFunc ();
};

#endif
</code></pre>
<p>AbgelKlasse.cpp</p>
<pre><code class="language-cpp">#include &quot;AbgelKlasse.h&quot;

void AbgelKlasse :: TestFunc ()
{
	std::cout &lt;&lt; &quot;Aus der Testfunktion&quot; &lt;&lt; std::endl;
}
</code></pre>
<p>main.cpp</p>
<pre><code class="language-cpp">#include &quot;Basisklasse.h&quot;

int main ()
{
	Basisklasse basis;
	basis.RufeDerivedFuncAuf ();
	std::cin.get ();
}
</code></pre>
<p>MS VC++ EE 2005 Projektdatei gibt's <a href="http://www.cpp-world.de/Workspace/Musterproblem.rar" rel="nofollow">hier</a> runterzuladen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1366375</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1366375</guid><dc:creator><![CDATA[Fragender2]]></dc:creator><pubDate>Sun, 16 Sep 2007 14:29:20 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion der abgeleiteten Klasse innerhalb der Basisklasse aufrufen? on Sun, 16 Sep 2007 14:41:44 GMT]]></title><description><![CDATA[<p>Mit Forward-Declaration klappt das auch nicht, indem ich das Inkludieren der abgeleiteten Klasse einfach lasse.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1366381</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1366381</guid><dc:creator><![CDATA[Fragender2]]></dc:creator><pubDate>Sun, 16 Sep 2007 14:41:44 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion der abgeleiteten Klasse innerhalb der Basisklasse aufrufen? on Sun, 16 Sep 2007 14:45:20 GMT]]></title><description><![CDATA[<p>Du kannst kein Objekt der abgeleiteten Klasse als Element der Basisklasse haben. Denn das Objekt hat einen Basisklassenanteil (es ist die Basisklasse), welcher ein Objekt der abgeleiteten Klasse als Element hat, welches einen Basisklassenanteil hat, welcher ein Objekt der abgeleiteten... Ich hoffe Du verstehst das Dilemma.</p>
<p>Du kannst aber mit einer Forward-Deklaration einen Zeiger oder eine Referenz auf ein Element der abgeleiteten Klasse halten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1366385</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1366385</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Sun, 16 Sep 2007 14:45:20 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion der abgeleiteten Klasse innerhalb der Basisklasse aufrufen? on Sun, 16 Sep 2007 14:52:59 GMT]]></title><description><![CDATA[<p>Jetzt verstehe ich, was du damit meinst... Es könnte eine Endlosrekursion entstehen.</p>
<p>LordJaxom schrieb:</p>
<blockquote>
<p>Du kannst aber mit einer Forward-Deklaration einen Zeiger oder eine Referenz auf ein Element der abgeleiteten Klasse halten.</p>
</blockquote>
<p>Meinst du damit einen Funktionszeiger, der auf den Klassenmember der abgel. Klasse zeigt? Das mit der Forward-Declaration ist mir nicht so geläufig, könntest du mir dazu bitte anhand des vorigen Codes ein Beispiel geben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1366387</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1366387</guid><dc:creator><![CDATA[Fragender2]]></dc:creator><pubDate>Sun, 16 Sep 2007 14:52:59 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion der abgeleiteten Klasse innerhalb der Basisklasse aufrufen? on Sun, 16 Sep 2007 14:59:00 GMT]]></title><description><![CDATA[<p>nein, er meint so etwas:</p>
<pre><code class="language-cpp">class foo;

class bar{
[...]
  foo * zeiger;
};

class foo : public bar{
[...]
};
</code></pre>
<p>das sollte funktionieren. danach kannst du unterhalb der beiden definitionen in den funktionen von bar foo ganz normal verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1366391</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1366391</guid><dc:creator><![CDATA[ghorst]]></dc:creator><pubDate>Sun, 16 Sep 2007 14:59:00 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion der abgeleiteten Klasse innerhalb der Basisklasse aufrufen? on Sun, 16 Sep 2007 15:09:20 GMT]]></title><description><![CDATA[<p>Hm, danke, ich verstehe zwar was du meinst, aber angewendet auf mein Beispiel möchte das ganze leider trotzdem nicht funktionieren.</p>
<p>So sieht das jetzt aus:</p>
<pre><code class="language-cpp">class AbgelKlasse;
class Basisklasse
{
	private:
		AbgelKlasse *derived;

	public:
		void RufeDerivedFuncAuf ();
};
</code></pre>
<p>Und was soll ich jetzt mit dem *derived Zeiger anfangen? Ich muss die Klasseninstanz erst auf dem Heap anlegen, per new, was aber auch nichts ändert an dem ganzen Problem. Wenn ich nun die Funktion der abgeleiteten Klasse aufrufen möchte, mache ich das so:</p>
<pre><code class="language-cpp">// Wenn das Objekt zuvor per new auf dem Heap angelegt wurde, klappt es so trotzdem nicht:
derived-&gt;TestFunc (); 

//Und so auch nicht:
TestFunc ();
</code></pre>
<p>Weist du eine Lösung?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1366402</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1366402</guid><dc:creator><![CDATA[Fragender2]]></dc:creator><pubDate>Sun, 16 Sep 2007 15:09:20 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion der abgeleiteten Klasse innerhalb der Basisklasse aufrufen? on Sun, 16 Sep 2007 16:38:01 GMT]]></title><description><![CDATA[<p>Keiner mehr ne Idee? <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/1366466</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1366466</guid><dc:creator><![CDATA[Fragender2]]></dc:creator><pubDate>Sun, 16 Sep 2007 16:38:01 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion der abgeleiteten Klasse innerhalb der Basisklasse aufrufen? on Sun, 16 Sep 2007 17:42:36 GMT]]></title><description><![CDATA[<p>meinst du sowas?</p>
<pre><code class="language-cpp">void RufeDerivedFuncAuf()
{
    if(Derived* d = dynamic_cast&lt;Derived*&gt;(this))
        d-&gt;func();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1366492</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1366492</guid><dc:creator><![CDATA[DrGreenthumb]]></dc:creator><pubDate>Sun, 16 Sep 2007 17:42:36 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion der abgeleiteten Klasse innerhalb der Basisklasse aufrufen? on Sun, 16 Sep 2007 18:15:27 GMT]]></title><description><![CDATA[<p>Ich weis es ja nichtmal, sonst wär's ja kein Problem. Deine Lösung klappt so aber leider nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1366508</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1366508</guid><dc:creator><![CDATA[Fragender2]]></dc:creator><pubDate>Sun, 16 Sep 2007 18:15:27 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion der abgeleiteten Klasse innerhalb der Basisklasse aufrufen? on Sun, 16 Sep 2007 18:32:09 GMT]]></title><description><![CDATA[<p>wie soll dir hier jemand helfen wenn nicht mal du weißt was du willst?</p>
<p>Außerdem ist &quot;klappt nicht&quot; keine ausreichende Fehlerbeschreibung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1366537</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1366537</guid><dc:creator><![CDATA[DrGreenthumb]]></dc:creator><pubDate>Sun, 16 Sep 2007 18:32:09 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion der abgeleiteten Klasse innerhalb der Basisklasse aufrufen? on Sun, 16 Sep 2007 19:22:17 GMT]]></title><description><![CDATA[<p>Fragender2 schrieb:</p>
<blockquote>
<p>Weist du eine Lösung?</p>
</blockquote>
<p>wenn ich wüsste, was nicht geht: vllt.</p>
<p>ansonsten fällt mir gerade auf, das sollte man natürlich nicht im konstruktor machen. das würde zu einer rekursiven erzeugung von derived-objekten führen. also wenn du das kindobjekt erzeugen und benutzen willst: nur in virtuellen funktionen, die du in derived überschreibst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1366582</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1366582</guid><dc:creator><![CDATA[ghorst]]></dc:creator><pubDate>Sun, 16 Sep 2007 19:22:17 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion der abgeleiteten Klasse innerhalb der Basisklasse aufrufen? on Sun, 16 Sep 2007 19:43:33 GMT]]></title><description><![CDATA[<blockquote>
<p>Außerdem ist &quot;klappt nicht&quot; keine ausreichende Fehlerbeschreibung.</p>
</blockquote>
<p>Öhm, ich dachte, ich muss euch nicht alles zweimal durchkauen, aber gut. Ich habe bereits in meinem ersten Posts gesagt, welche Fehlermeldung der Compiler bringt, und ich habe dazu ein Codebeispiel geliefert (an dem sich fast keiner bedient). Zudem habe ich auch noch die Projektdateien hochgeladen, damit jeder selber sehen kann, um was es sich genau handelt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1366603</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1366603</guid><dc:creator><![CDATA[Fragender2]]></dc:creator><pubDate>Sun, 16 Sep 2007 19:43:33 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion der abgeleiteten Klasse innerhalb der Basisklasse aufrufen? on Sun, 16 Sep 2007 21:23:23 GMT]]></title><description><![CDATA[<p>weißt du, dass problem ist, wenn du die forward-deklaration richtig durchgeführt hast, ist deine im anfangspost beschriebene fehlermeldung nett ausgedrückt mehr als unwahrscheinlich.</p>
<p>die variante, die DrGreenthumb gepostet hat, bezieht sich darauf, dass du, wenn du ein abgeleitetes objekt hast, dieses eine andere funktionalität in der mutterklasse besitzt als es die mutterklasse würde. deine fehlerbeschreibung zu seiner erklärung ist wirklich dürftige.</p>
<p>warum keiner deinen code nutzt? die antwort ist recht einfach: die meisten haben keine lust soviel code zu verändern. ich auch nicht, daher kriegst du verkürzte stücke code, die beschreiben, wie es funktionieren kann (diese codestücke kann man nebenbei auch recyclen...).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1366640</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1366640</guid><dc:creator><![CDATA[ghorst]]></dc:creator><pubDate>Sun, 16 Sep 2007 21:23:23 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion der abgeleiteten Klasse innerhalb der Basisklasse aufrufen? on Sun, 16 Sep 2007 23:00:59 GMT]]></title><description><![CDATA[<p>@Fragender2:<br />
Was versuchst du überhaupt zu machen?<br />
Für sowas verwendet man normalerweise virtuelle Funktionen oder das curiously recurring template pattern.</p>
<p>virtuelle Funktionen :</p>
<pre><code class="language-cpp">class base
{
public:
    virtual void foo() = 0;
    void bar()
    {
        printf(&quot;base::bar\n&quot;);
        foo(); // von 'derived' implementiert
    }
};

class derived : public base
{
public:
    virtual void foo()
    {
        printf(&quot;derived::foo\n&quot;);
    }
};

int main()
{
    derived d;
    d.bar();
}
</code></pre>
<p>curiously recurring template pattern:</p>
<pre><code class="language-cpp">template &lt;class D&gt; class base
{
public:
    void bar()
    {
        printf(&quot;base::bar\n&quot;);
        static_cast&lt;D*&gt;(this)-&gt;D::foo(); // D::foo aufrufen
    }
};

class derived : public base&lt;derived&gt;
{
public:
    void foo()
    {
        printf(&quot;derived::foo\n&quot;);
    }
};

int main()
{
    derived d;
    d.bar();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1366655</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1366655</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sun, 16 Sep 2007 23:00:59 GMT</pubDate></item></channel></rss>