<?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[Methodenimplementation von abstrakten Klassen]]></title><description><![CDATA[<p>Hallo,<br />
ich habe gerade ein Problem bei der Vererbung.</p>
<p>Ich habe mir ein Art Interface geschrieben, das allen Klassen die von ihm erben zusätzlich Hilfsmethoden zur Verfügung stellt.</p>
<p>So sieht es ungefähr aus:</p>
<pre><code class="language-cpp">#include irgendEineKlasse

class IKlasse
{
protected:
	int hilfsMethode(irgendEineKlasse a, int b)
	{
		... mach was damit
	}

public:
	virtual double zuImplementieren(int a, int b) = 0;
}
</code></pre>
<p>In der Art sieht es aus.<br />
Die Klasse die eine Objekt davon erstellt hat unter Umständen gar nichts mit <em>irgendEineKlasse</em> zu tun.<br />
Weshalb ich es gerne so umbauen will, dass der, der ein Objekt davon macht, nicht unbedingt das include-Verzeichnis von <em>irgendEineKlasse</em> wissen muss.</p>
<p>Vorwärtsdeklaration geht ja so nicht direkt, da in der <em>hilfsMethode1</em> darauf zugegriffen wird.<br />
Also dachte ich mir, wird es auch bei Vererbungen sicher gehen, wenn ich einfach das Interface in .h und .cpp teile, so dass ich anstelle des <em>#includes</em> <em>class irgendEineKlasse;</em> schreiben kann und die Implementation von <em>hilfsMethode</em> in der cpp steht.</p>
<p>Lies sich auch wunderbar kompilieren.</p>
<p>Bei dem Programm die aber nun eine Instanz von einer Klasse erstellen will, die von IKlasse abgeleitet ist, kommt nun folgende Kompiler-Fehlermeldung:<br />
Verweis auf nicht aufgelöstes externes Symbol &quot;hilfsMethode&quot;..</p>
<p>Also geh ich davon aus, dass ich das mit in .h und .cpp splitten bei Klassen, von denen ich ableiten will, nicht so einfach machen kann.</p>
<p>Wie würdet ihr dieses Problem, dass ich unabhängig von <em>irgendEineKlasse</em> sein will, angehen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/288100/methodenimplementation-von-abstrakten-klassen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 20 Aug 2026 04:02:29 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/288100.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 10 Jun 2011 10:28:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Methodenimplementation von abstrakten Klassen on Fri, 10 Jun 2011 10:28:37 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich habe gerade ein Problem bei der Vererbung.</p>
<p>Ich habe mir ein Art Interface geschrieben, das allen Klassen die von ihm erben zusätzlich Hilfsmethoden zur Verfügung stellt.</p>
<p>So sieht es ungefähr aus:</p>
<pre><code class="language-cpp">#include irgendEineKlasse

class IKlasse
{
protected:
	int hilfsMethode(irgendEineKlasse a, int b)
	{
		... mach was damit
	}

public:
	virtual double zuImplementieren(int a, int b) = 0;
}
</code></pre>
<p>In der Art sieht es aus.<br />
Die Klasse die eine Objekt davon erstellt hat unter Umständen gar nichts mit <em>irgendEineKlasse</em> zu tun.<br />
Weshalb ich es gerne so umbauen will, dass der, der ein Objekt davon macht, nicht unbedingt das include-Verzeichnis von <em>irgendEineKlasse</em> wissen muss.</p>
<p>Vorwärtsdeklaration geht ja so nicht direkt, da in der <em>hilfsMethode1</em> darauf zugegriffen wird.<br />
Also dachte ich mir, wird es auch bei Vererbungen sicher gehen, wenn ich einfach das Interface in .h und .cpp teile, so dass ich anstelle des <em>#includes</em> <em>class irgendEineKlasse;</em> schreiben kann und die Implementation von <em>hilfsMethode</em> in der cpp steht.</p>
<p>Lies sich auch wunderbar kompilieren.</p>
<p>Bei dem Programm die aber nun eine Instanz von einer Klasse erstellen will, die von IKlasse abgeleitet ist, kommt nun folgende Kompiler-Fehlermeldung:<br />
Verweis auf nicht aufgelöstes externes Symbol &quot;hilfsMethode&quot;..</p>
<p>Also geh ich davon aus, dass ich das mit in .h und .cpp splitten bei Klassen, von denen ich ableiten will, nicht so einfach machen kann.</p>
<p>Wie würdet ihr dieses Problem, dass ich unabhängig von <em>irgendEineKlasse</em> sein will, angehen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2076235</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2076235</guid><dc:creator><![CDATA[Xenya]]></dc:creator><pubDate>Fri, 10 Jun 2011 10:28:37 GMT</pubDate></item><item><title><![CDATA[Reply to Methodenimplementation von abstrakten Klassen on Fri, 10 Jun 2011 10:34:24 GMT]]></title><description><![CDATA[<p>Xenya schrieb:</p>
<blockquote>
<p>Also geh ich davon aus, dass ich das mit in .h und .cpp splitten bei Klassen, von denen ich ableiten will, nicht so einfach machen kann.</p>
</blockquote>
<p>Ich gehe davon aus, dass du etwas falsch gemacht hast. Selbstverständlich kann man die Funktionen einer Klasse, von der abgeleitet wird, außerhalb des Headers implementieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2076238</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2076238</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Fri, 10 Jun 2011 10:34:24 GMT</pubDate></item><item><title><![CDATA[Reply to Methodenimplementation von abstrakten Klassen on Fri, 10 Jun 2011 11:00:00 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">// base.hpp

class Irgendwas;
class Base
{
public:
  virtual void Method() = 0;
private:
  void f(Irgendwas&amp; was);
};

// base.cpp
#include &quot;base.hpp&quot;
#include &quot;irgendwas.hpp&quot;
void Base::f(Irgendwas&amp; was)
{
  /* ... */
}

// conrete.hpp
#include &quot;base.hpp&quot;
class Concrete : public Base
{
public:
  void Method();
};

// concrete.cpp
#include &quot;concrete.hpp&quot;
void Concrete::Method()
{
   /*...*/
}

// foo.cpp
#include &quot;base.hpp&quot;
void Foo(Base&amp; i)
{
  i.Method();
}
</code></pre>
<p>Edit: hatte es erst falsch verstanden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2076251</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2076251</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Fri, 10 Jun 2011 11:00:00 GMT</pubDate></item><item><title><![CDATA[Reply to Methodenimplementation von abstrakten Klassen on Fri, 10 Jun 2011 12:04:23 GMT]]></title><description><![CDATA[<p>ahhh, ich habs<br />
die <em>hilfsMethode</em> war als inline deklariert. Da es ja nun in der cpp schon kompiliert wird und bei der Klasse, die es einbindet, auf die lib bei der Methode zugegriffen wird, darf es nicht inline sein.</p>
<p>Danke für die Antworten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2076299</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2076299</guid><dc:creator><![CDATA[Xenya]]></dc:creator><pubDate>Fri, 10 Jun 2011 12:04:23 GMT</pubDate></item></channel></rss>