<?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[Interfaces]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich bin C++ Neuling und versuche gerade sowas ähnliches wie Java Interfaces zu benutzen. Mein Lösungsversuch (siehe Unten) lässt sich leider nicht kompilieren (Probleme im InterfaceManager). Vielleicht kann mir von euch jemand Tipps geben.</p>
<p>Danke schon mal,</p>
<p>CPP_Noob</p>
<p>PS: Ich möchte, wenn möglich, die &quot;Pointerei&quot; vermeiden und mit Referenzen arbeiten.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

class Interface
{
public:
	virtual int some_method() = 0;
};

class Interface_Impl : public Interface
{
public:
	Interface_Impl() : m_value(1001) {}

	virtual ~Interface_Impl() {}

	virtual int some_method()
	{
		return m_value;
	}

protected:
	int m_value;
};

class InterfaceManager
{
public:
	InterfaceManager(const Interface&amp; interface) : m_interface(interface)
	{
	}

	Interface get_interface()
	{
		return m_interface;
	}

private:
	Interface m_interface;
};

int main()
{
	Interface_Impl i;

	InterfaceManager im(i);

	std::cout &lt;&lt; im.get_interface().some_method() &lt;&lt; std::endl;
}
</code></pre>
<p>Compiler:<br />
main.cpp:32: Fehler: ungültiger abstrakter Rückgabetyp für Elementfunktion »Interface InterfaceManager::get_interface()«<br />
main.cpp:4: Anmerkung: denn die folgenden virtuellen Funktionen sind rein innerhalb »Interface«:<br />
main.cpp:6: Anmerkung: virtual int Interface::some_method()<br />
main.cpp:38: Fehler: Feld »InterfaceManager::m_interface« kann nicht als vom abstrakten Typ »Interface« deklariert werden<br />
main.cpp:4: Anmerkung: denn der Typ »Interface« hat rein virtuelle Funktionen<br />
main.cpp: In member function »Interface InterfaceManager::get_interface()«:<br />
main.cpp:32: Fehler: ungültiger abstrakter Rückgabetyp für Elementfunktion »Interface InterfaceManager::get_interface()«<br />
main.cpp:4: Anmerkung: denn der Typ »Interface« hat rein virtuelle Funktionen<br />
main.cpp:34: Fehler: es kann kein Objekt des abstrakten Typs »Interface« belegt werden<br />
main.cpp:4: Anmerkung: denn der Typ »Interface« hat rein virtuelle Funktionen<br />
main.cpp: In function »int main()«:<br />
main.cpp:47: Fehler: es kann kein Objekt des abstrakten Typs »Interface« belegt werden<br />
main.cpp:4: Anmerkung: denn der Typ »Interface« hat rein virtuelle Funktionen<br />
make: *** [main.o] Fehler 1</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/204400/interfaces</link><generator>RSS for Node</generator><lastBuildDate>Thu, 08 Oct 2026 13:44:50 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/204400.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 02 Feb 2008 18:57:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Interfaces on Sat, 02 Feb 2008 18:57:47 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich bin C++ Neuling und versuche gerade sowas ähnliches wie Java Interfaces zu benutzen. Mein Lösungsversuch (siehe Unten) lässt sich leider nicht kompilieren (Probleme im InterfaceManager). Vielleicht kann mir von euch jemand Tipps geben.</p>
<p>Danke schon mal,</p>
<p>CPP_Noob</p>
<p>PS: Ich möchte, wenn möglich, die &quot;Pointerei&quot; vermeiden und mit Referenzen arbeiten.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

class Interface
{
public:
	virtual int some_method() = 0;
};

class Interface_Impl : public Interface
{
public:
	Interface_Impl() : m_value(1001) {}

	virtual ~Interface_Impl() {}

	virtual int some_method()
	{
		return m_value;
	}

protected:
	int m_value;
};

class InterfaceManager
{
public:
	InterfaceManager(const Interface&amp; interface) : m_interface(interface)
	{
	}

	Interface get_interface()
	{
		return m_interface;
	}

private:
	Interface m_interface;
};

int main()
{
	Interface_Impl i;

	InterfaceManager im(i);

	std::cout &lt;&lt; im.get_interface().some_method() &lt;&lt; std::endl;
}
</code></pre>
<p>Compiler:<br />
main.cpp:32: Fehler: ungültiger abstrakter Rückgabetyp für Elementfunktion »Interface InterfaceManager::get_interface()«<br />
main.cpp:4: Anmerkung: denn die folgenden virtuellen Funktionen sind rein innerhalb »Interface«:<br />
main.cpp:6: Anmerkung: virtual int Interface::some_method()<br />
main.cpp:38: Fehler: Feld »InterfaceManager::m_interface« kann nicht als vom abstrakten Typ »Interface« deklariert werden<br />
main.cpp:4: Anmerkung: denn der Typ »Interface« hat rein virtuelle Funktionen<br />
main.cpp: In member function »Interface InterfaceManager::get_interface()«:<br />
main.cpp:32: Fehler: ungültiger abstrakter Rückgabetyp für Elementfunktion »Interface InterfaceManager::get_interface()«<br />
main.cpp:4: Anmerkung: denn der Typ »Interface« hat rein virtuelle Funktionen<br />
main.cpp:34: Fehler: es kann kein Objekt des abstrakten Typs »Interface« belegt werden<br />
main.cpp:4: Anmerkung: denn der Typ »Interface« hat rein virtuelle Funktionen<br />
main.cpp: In function »int main()«:<br />
main.cpp:47: Fehler: es kann kein Objekt des abstrakten Typs »Interface« belegt werden<br />
main.cpp:4: Anmerkung: denn der Typ »Interface« hat rein virtuelle Funktionen<br />
make: *** [main.o] Fehler 1</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1448179</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1448179</guid><dc:creator><![CDATA[CPP_Noob]]></dc:creator><pubDate>Sat, 02 Feb 2008 18:57:47 GMT</pubDate></item><item><title><![CDATA[Reply to Interfaces on Sat, 02 Feb 2008 19:01:30 GMT]]></title><description><![CDATA[<p>wenn du mit abstrakten klassen arbeitest, wirst du zur verwendung von pointern gezwungen. lässt sich nicht verhindern.</p>
<pre><code class="language-cpp">private:
    Interface m_interface;
</code></pre>
<p>will einen konrekten typen initalisieren, geht aber nicht.</p>
<pre><code class="language-cpp">private:
    Interface *m_interface;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1448181</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1448181</guid><dc:creator><![CDATA[thordk_]]></dc:creator><pubDate>Sat, 02 Feb 2008 19:01:30 GMT</pubDate></item><item><title><![CDATA[Reply to Interfaces on Sat, 02 Feb 2008 21:09:00 GMT]]></title><description><![CDATA[<p>Nö, er kann auch Referenzen benutzen. Oder auch Smart-Pointer, wenn er Javaner ist. <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="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1448233</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1448233</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Sat, 02 Feb 2008 21:09:00 GMT</pubDate></item></channel></rss>