<?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[Funktionszeiger in einer Klasse]]></title><description><![CDATA[<p>Ich benutze Funktionszeiger um Callbackfunktionen zu progammieren. Die Callbackfunktion ist aber in einer Klasse. Wenn die beiden Funktionen nicht in einer Klasse definiert sind, dann lässt sich der Code fehlerfrei compilieren. Seit dem die beiden Funktionen aber ein Member einer Klasse sind, bekomme ich eine Fehlermeldung (2 mal):</p>
<pre><code>error C2664: 'ausgabe' : Konvertierung des Parameters 1 von 'char (char)' in 'char (__cdecl *)(char)' nicht moeglich
        Keine Funktion mit diesem Namen im Gueltigkeitsbereich stimmt mit dem Zieltyp ueberein
</code></pre>
<p>Der Beispielcode:</p>
<pre><code>#include &quot;stdafx.h&quot;

class firstClass
{
public:
	char returnChar(char lChar)
	{
		return lChar;
	}
};

class secondClass
{
public:
	char returnChar(char lChar)
	{
		return lChar;
	}
	void ausgabe2()
	{
		ausgabe(returnChar);
	}
	void ausgabe(char (*f)(char))
	{
		cout &lt;&lt; (*f)('r');
	}
};

int main(int argc, char* argv[])
{
	firstClass First;
	secondClass Second;
	printf(&quot;Hallo Welt!\n&quot;);
	Second.ausgabe(First.returnChar);
	getchar();
	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/120036/funktionszeiger-in-einer-klasse</link><generator>RSS for Node</generator><lastBuildDate>Sat, 22 Aug 2026 05:34:52 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/120036.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 08 Sep 2005 10:05:32 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Funktionszeiger in einer Klasse on Thu, 08 Sep 2005 10:05:32 GMT]]></title><description><![CDATA[<p>Ich benutze Funktionszeiger um Callbackfunktionen zu progammieren. Die Callbackfunktion ist aber in einer Klasse. Wenn die beiden Funktionen nicht in einer Klasse definiert sind, dann lässt sich der Code fehlerfrei compilieren. Seit dem die beiden Funktionen aber ein Member einer Klasse sind, bekomme ich eine Fehlermeldung (2 mal):</p>
<pre><code>error C2664: 'ausgabe' : Konvertierung des Parameters 1 von 'char (char)' in 'char (__cdecl *)(char)' nicht moeglich
        Keine Funktion mit diesem Namen im Gueltigkeitsbereich stimmt mit dem Zieltyp ueberein
</code></pre>
<p>Der Beispielcode:</p>
<pre><code>#include &quot;stdafx.h&quot;

class firstClass
{
public:
	char returnChar(char lChar)
	{
		return lChar;
	}
};

class secondClass
{
public:
	char returnChar(char lChar)
	{
		return lChar;
	}
	void ausgabe2()
	{
		ausgabe(returnChar);
	}
	void ausgabe(char (*f)(char))
	{
		cout &lt;&lt; (*f)('r');
	}
};

int main(int argc, char* argv[])
{
	firstClass First;
	secondClass Second;
	printf(&quot;Hallo Welt!\n&quot;);
	Second.ausgabe(First.returnChar);
	getchar();
	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/867646</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/867646</guid><dc:creator><![CDATA[Timme]]></dc:creator><pubDate>Thu, 08 Sep 2005 10:05:32 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionszeiger in einer Klasse on Thu, 08 Sep 2005 10:07:29 GMT]]></title><description><![CDATA[<p>Hier nochmal den Code, der fehlerfrei funktioniert:</p>
<pre><code>#include &quot;stdafx.h&quot;

char returnChar(char lChar)
{
	return lChar;
}

void ausgabe(char (*f)(char))
{
	cout &lt;&lt; (*f)('r');
}

int main(int argc, char* argv[])
{
	printf(&quot;Hallo Welt!\n&quot;);
	ausgabe(returnChar);
	getchar();
	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/867648</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/867648</guid><dc:creator><![CDATA[Timme]]></dc:creator><pubDate>Thu, 08 Sep 2005 10:07:29 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionszeiger in einer Klasse on Thu, 08 Sep 2005 10:20:09 GMT]]></title><description><![CDATA[<p><a href="http://www.newty.de/fpt/index.html" rel="nofollow">The Function Pointer Tutorials</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/867661</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/867661</guid><dc:creator><![CDATA[FireFlow]]></dc:creator><pubDate>Thu, 08 Sep 2005 10:20:09 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionszeiger in einer Klasse on Thu, 08 Sep 2005 10:22:18 GMT]]></title><description><![CDATA[<p>Sollte einen nicht überraschen. Um eine Memberfunktion ausführen zu können brauchst du ein Objekt.<br />
Du übergibst aber nur die Adresse der Funktion, die kann der Compiler aber keinem Objekt eindeutig zuordnen und dann meckert er.</p>
<p>Mögliche Lösungen:</p>
<p>- Funktions-Objekte<br />
- Schnittstellen-Klasse von denen die betroffenen Klassen abzuleiten sind<br />
- wie gehabt mit staischen Funktionen arbeiten</p>
]]></description><link>https://www.c-plusplus.net/forum/post/867663</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/867663</guid><dc:creator><![CDATA[Mathias]]></dc:creator><pubDate>Thu, 08 Sep 2005 10:22:18 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionszeiger in einer Klasse on Thu, 08 Sep 2005 10:34:34 GMT]]></title><description><![CDATA[<p>Ähnliches hab' ich mir auch geschrieben bzw. bin noch dabei. Ich bin dabei auf &quot;Functors&quot; gestoßen, was genau das war, was ich gesucht habe. Die Idee dahinter ist, dass Du eine Klasse schreibst, wo Du den operator() überschreibst. Wenn Du das ganze als Template-Klasse machst, dann kannst Du da denke ich viel mit anfangen, hier der Code (ungetestet):</p>
<pre><code class="language-cpp">template&lt;class T&gt;
class MethodPtr {
public:
   MethodPtr(T* _Object, void (T::* _Method)()) {
      this-&gt;Object  = _Object;
      this-&gt;Method1 = _Method;
   }
   void operator()() {
      (*this-&gt;Object.*this-&gt;Method)();
   }

private:
   T* Object;
   void (T::* Method)();
};
</code></pre>
<p>Aufrufen kannst Du das ganze dann so:</p>
<pre><code class="language-cpp">secondClass Second;
MethodPtr mytest(&amp;Second, &amp;secondClass::returnChar);
mytest();
</code></pre>
<p>Ich muss die template-Parameter bei mir nicht weiter spezifizieren, da der Compiler (MinGW) die anscheinend automatisch erkennt, weiß aber nicht, ob das Standard-konform ist. Finde ich eigentlich eine ganz schöne Lösung und Du hast eine kleine Typsicherheit gegeben.<br />
(Mutwillig kann man natürlich alles kaputt machen <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>
]]></description><link>https://www.c-plusplus.net/forum/post/867676</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/867676</guid><dc:creator><![CDATA[mantiz]]></dc:creator><pubDate>Thu, 08 Sep 2005 10:34:34 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionszeiger in einer Klasse on Thu, 08 Sep 2005 10:40:04 GMT]]></title><description><![CDATA[<p>@Matiz: Hm, so hab ich das auch schon woanders gesehen (CeGUI), aber ich hab da noch nicht richtig duirchgeblickt. Aber ich sage schonmal danke</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10111">@Mathias</a>: Ich glaube, das ist nicht die Lösung...</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9894">@FireFlow</a>: Werde ich mir mal angucken, wenn ich mal Zeit hab <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/867681</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/867681</guid><dc:creator><![CDATA[Timme]]></dc:creator><pubDate>Thu, 08 Sep 2005 10:40:04 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionszeiger in einer Klasse on Thu, 08 Sep 2005 10:47:49 GMT]]></title><description><![CDATA[<p>Ja, das ist es. Ich muss wahrscheinlich nur den Operator auf</p>
<pre><code class="language-cpp">void operator()(char pChar) {
      (*this-&gt;Object.*this-&gt;Method)(pChar);
   }
</code></pre>
<p>umschreiben...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/867689</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/867689</guid><dc:creator><![CDATA[Timme]]></dc:creator><pubDate>Thu, 08 Sep 2005 10:47:49 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionszeiger in einer Klasse on Thu, 08 Sep 2005 11:08:06 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/8453">@Timme</a><br />
... was dann nichts anderes als ein Funktions-Operator ist wodurch das Objekt als Funktion ausführbar wird (Funktions-Objekt)....<br />
<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="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/867709</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/867709</guid><dc:creator><![CDATA[Mathias]]></dc:creator><pubDate>Thu, 08 Sep 2005 11:08:06 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionszeiger in einer Klasse on Thu, 08 Sep 2005 18:16:19 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10111">@Mathias</a>: Sorry, ich hab deinen Beitrag nicht genau gelesen. Hab nur die ersten Zeilen gelesen, hab mir aber danach gedacht, dass das mir nicht viel weiterhelfen wird. Und hab erstmal den Beitrag weiter unten gelesen.(Hatte nicht viel Zeit in der Freistunde) Jetzt im Nachhinein sehe ich, dass der Beitrag doch so einige Nützliche Informationen beinhaltet <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>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9894">@FireFlow</a>: Das Tut ist ganz nützlich, hab ich mir vorhin schon ausgedruckt....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/868122</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/868122</guid><dc:creator><![CDATA[Timme]]></dc:creator><pubDate>Thu, 08 Sep 2005 18:16:19 GMT</pubDate></item></channel></rss>