<?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[Funktionspointer - Function Pointer]]></title><description><![CDATA[<p>Hi,</p>
<p>ich hab ein Verständnisproblem mit den Function Pointern. Vorweg, ja ich habe mir schon fast alle Beiträge hier im Forum angeschaut.</p>
<p>Kurz und knapp, hier ist der Code und was er an welcher Stelle machen soll:</p>
<pre><code>class A
{
public:
	void sayHello(){ std::cout &lt;&lt; &quot;Hello from A\n&quot;; }
	void sayAnotherHello() { std::cout &lt;&lt; &quot;Another hello from A\n&quot;; }
};

int main()
{
	A a;
	void (*helloFunc)() = // ? Hier will ich sagen das helloFunc auf a.sayHello() zeigt
	helloFunc();
	helloFunc = // ? Hier will ich sagen das helloFunc auf a.sayAnotherHello() zeigt
	helloFunc();
}
</code></pre>
<p>Ich benutze Visual Studio 8. Vielen Dank im Vorraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/195141/funktionspointer-function-pointer</link><generator>RSS for Node</generator><lastBuildDate>Sat, 25 Apr 2026 09:11:40 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/195141.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 14 Oct 2007 18:06:41 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Funktionspointer - Function Pointer on Sun, 14 Oct 2007 18:06:41 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich hab ein Verständnisproblem mit den Function Pointern. Vorweg, ja ich habe mir schon fast alle Beiträge hier im Forum angeschaut.</p>
<p>Kurz und knapp, hier ist der Code und was er an welcher Stelle machen soll:</p>
<pre><code>class A
{
public:
	void sayHello(){ std::cout &lt;&lt; &quot;Hello from A\n&quot;; }
	void sayAnotherHello() { std::cout &lt;&lt; &quot;Another hello from A\n&quot;; }
};

int main()
{
	A a;
	void (*helloFunc)() = // ? Hier will ich sagen das helloFunc auf a.sayHello() zeigt
	helloFunc();
	helloFunc = // ? Hier will ich sagen das helloFunc auf a.sayAnotherHello() zeigt
	helloFunc();
}
</code></pre>
<p>Ich benutze Visual Studio 8. Vielen Dank im Vorraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1385096</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1385096</guid><dc:creator><![CDATA[airscape]]></dc:creator><pubDate>Sun, 14 Oct 2007 18:06:41 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionspointer - Function Pointer on Sun, 14 Oct 2007 18:11:59 GMT]]></title><description><![CDATA[<p><a href="https://www.google.de/search?&amp;q=Methodenpointer" rel="nofollow">Google: Methodenpointer</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1385101</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1385101</guid><dc:creator><![CDATA[FürKlassen]]></dc:creator><pubDate>Sun, 14 Oct 2007 18:11:59 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionspointer - Function Pointer on Sun, 14 Oct 2007 18:18:51 GMT]]></title><description><![CDATA[<p>Ehm das ist jetzt nicht ganz so einfach. Das ist kein normaler Funktionszeiger mehr.<br />
Die Funktionssignatur:</p>
<pre><code class="language-cpp">typedef void (*fnHello)()
</code></pre>
<p>gehört bsw. zu einer Funktion wie:</p>
<pre><code class="language-cpp">void foo()
{
    std::cout &lt;&lt; &quot;Hello&quot; &lt;&lt; std::endl;
}

int main()
{
    fnHello func = &amp;foo;
    func();
}
</code></pre>
<p>... D.h. die Funktion liegt nicht in einer Klasse/Struct. Sozusagen ist das ein &quot;C-Style&quot; Funktionszeiger <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
<p>Scheinbar willst du jetzt aber ein Funktionszeiger auf eine Memberfunktion haben? Geht auch! Da muss die Signatur der Funktion aber geändert werden!</p>
<pre><code class="language-cpp">typedef void (A::*fnHello)() /*const*/
</code></pre>
<p>...</p>
<pre><code class="language-cpp">void A::foo() /*const*/
{
    std::cout &lt;&lt; &quot;Hallo&quot; &lt;&lt; std::endl;
}

int main()
{
    fnHello func = &amp;A::foo;
    A obj;
    (obj.*func)();
}
</code></pre>
<p>Eine Funktionszeiger auf eine Memberfunktion braucht aber immer ein Objekt (es sei den die Funktion ist static), da einer Memberfunktion IMMER(wenn nicht static) einen this-Zeiger übergeben bekommt.</p>
<p>=&gt;</p>
<pre><code class="language-cpp">class A
{
public:
    void foo() const { std::cout &lt;&lt; &quot;foo()&quot; &lt;&lt; std::endl; }
    void bar() const { std::cout &lt;&lt; &quot;bar()&quot; &lt;&lt; std::endl; }
};

typedef void (A::*fnCall)() const;

int main()
{
    A obj;
    fnCall say = &amp;A::foo;
    (obj.*say)();
    say = &amp;A::bar;
    (obj.*say)();
}
</code></pre>
<p><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/1385105</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1385105</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Sun, 14 Oct 2007 18:18:51 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionspointer - Function Pointer on Sun, 14 Oct 2007 21:26:05 GMT]]></title><description><![CDATA[<p>(D)Evil ich danke dir!</p>
<p>Nachtrag:</p>
<p>Wie kann ich jetzt die Methode übergeben und in einer anderen Methode aufrufen? Dazu muss ich doch das Objekt und die Methode dann übergeben?</p>
<pre><code>void scream(void* obj, void (*fnHello)())
.
.
.
a.scream(&amp;a, &amp;A::sayAnotherHello); // geht nicht
</code></pre>
<p>Wo ist mein Denkfehler?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1385175</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1385175</guid><dc:creator><![CDATA[airscape]]></dc:creator><pubDate>Sun, 14 Oct 2007 21:26:05 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionspointer - Function Pointer on Mon, 15 Oct 2007 11:22:00 GMT]]></title><description><![CDATA[<p>Du scheinst Methoden und Methodenpointer trotzdem noch nicht verstanden zu haben.<br />
Wenn du willst, daß deine Methode A::scream sowohl ein Objekt als auch eine Methode (als Methodenzeiger) übergeben bekommen soll, dann mußt du auch die Parameter dementsprechend deklarieren.<br />
Wenn bei dir zusätzlich das übergebene Objekt immer gleich dem aktuellen Objekt (bei dir heißt die Variable 'a') ist, dann kannst du auch diesen Parameter einsparen und intern in der Methode dann 'this' verwenden.<br />
Code gebe ich dir jetzt extra nicht, damit du es selbst herausfindest.<br />
Übung macht den Meister!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1385474</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1385474</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Mon, 15 Oct 2007 11:22:00 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionspointer - Function Pointer on Mon, 29 Oct 2007 18:52:19 GMT]]></title><description><![CDATA[<p>Guck dir mal nochmal an was ich oben geschrieben habe:</p>
<pre><code class="language-cpp">typedef void (A::*fnCall)() const;
</code></pre>
<p>... dann guck dir mal deine Funktion an. Dazu solltest du beachten, dass bei einem void-Zeiger sämtliche Typeninformationen verloren gehen!</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
struct scream
{
    typedef void (T::*fnFunc)() const;
    static void call(const T&amp; obj, fnFunc ptr) const;
    {    (obj.*ptr)(); }
};
</code></pre>
<pre><code class="language-cpp">class bar
{
public:
    void foo() const;
};

int main()
{
    bar _inst;
    scream&lt;bar&gt;::call(_inst, &amp;bar::foo);
}
</code></pre>
<p>:....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1385889</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1385889</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Mon, 29 Oct 2007 18:52:19 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionspointer - Function Pointer on Mon, 15 Oct 2007 19:07:31 GMT]]></title><description><![CDATA[<p>(D)Evil schrieb:</p>
<blockquote>
<pre><code class="language-cpp">template&lt;typename T&gt;
struct scream
{
    typedef void (T::*fnFunc)() const;
    void call(const T&amp; obj, fnFunc ptr) const;
    {    (obj.*ptr)(); }
};
</code></pre>
<pre><code class="language-cpp">[...]
    scream&lt;bar&gt;::call(_inst, &amp;bar::foo); [...]
</code></pre>
</blockquote>
<p>fehlt da nicht ein static? <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/1385893</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1385893</guid><dc:creator><![CDATA[Checker*amp*Murckser]]></dc:creator><pubDate>Mon, 15 Oct 2007 19:07:31 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionspointer - Function Pointer on Mon, 29 Oct 2007 18:26:47 GMT]]></title><description><![CDATA[<p>sorry für die späte Antwort, danke für eure Hilfe</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1394297</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1394297</guid><dc:creator><![CDATA[airscape]]></dc:creator><pubDate>Mon, 29 Oct 2007 18:26:47 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionspointer - Function Pointer on Wed, 14 Oct 2015 18:41:31 GMT]]></title><description><![CDATA[<p>hi,</p>
<p>sorry das ganze ist schon sehr alt, aber ich hab ne frage zu dem was Checker&amp;Murckser schrieb.<br />
Er meinte das ein &quot;static&quot; fehler würde, ich konnte nur leider nicht rausfinden wo es hin kommt.</p>
<p>könnte ihr mir bitte helfen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2471013</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2471013</guid><dc:creator><![CDATA[crischan]]></dc:creator><pubDate>Wed, 14 Oct 2015 18:41:31 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionspointer - Function Pointer on Wed, 14 Oct 2015 18:56:45 GMT]]></title><description><![CDATA[<p>crischan schrieb:</p>
<blockquote>
<p>hi,</p>
<p>sorry das ganze ist schon sehr alt, aber ich hab ne frage zu dem was Checker&amp;Murckser schrieb.<br />
Er meinte das ein &quot;static&quot; fehler würde, ich konnte nur leider nicht rausfinden wo es hin kommt.</p>
<p>könnte ihr mir bitte helfen?</p>
</blockquote>
<p>(D)Evil hat seinen Code doch schon vor 8 Jahren entsprechend korrigiert...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2471016</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2471016</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 14 Oct 2015 18:56:45 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionspointer - Function Pointer on Wed, 14 Oct 2015 19:10:32 GMT]]></title><description><![CDATA[<p>ah jau,</p>
<p>jetzt wo du es sagt sehe ich es auch^^</p>
<p>aber warum bekomm ich den bei</p>
<pre><code>scream&lt;bar&gt;::call(_inst, &amp;bar::foo);
</code></pre>
<p>den fehler code C2272 : 'call': Modifizierer bei statischen Memberfunktionen nicht zulässig?</p>
<p>Oder eine andere frage<br />
Wie kann ich &quot;void (CLASS::<em>)()&quot; zu &quot;void (</em>)()&quot; konvertieren?<br />
Geht das überhaupt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2471018</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2471018</guid><dc:creator><![CDATA[crischan]]></dc:creator><pubDate>Wed, 14 Oct 2015 19:10:32 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionspointer - Function Pointer on Wed, 14 Oct 2015 19:44:59 GMT]]></title><description><![CDATA[<p>crischan schrieb:</p>
<blockquote>
<p>aber warum bekomm ich den bei</p>
<pre><code>scream&lt;bar&gt;::call(_inst, &amp;bar::foo);
</code></pre>
<p>den fehler code C2272 : 'call': Modifizierer bei statischen Memberfunktionen nicht zulässig?</p>
</blockquote>
<p>Weil das const nach dem Einfügen des static hätte entfernt werden müssen. Und natürlich ebenso das Semikolon, falls du da nicht selber drauf gekommen wärst.</p>
<blockquote>
<p>Oder eine andere frage<br />
Wie kann ich &quot;void (CLASS::<em>)()&quot; zu &quot;void (</em>)()&quot; konvertieren?<br />
Geht das überhaupt?</p>
</blockquote>
<p>Kann es sein, dass dies deine eigentliche Frage ist und es nicht nötig gewesen wäre, die Toten zu stören?</p>
<p>Die Antwort ist: Mit reinterpret_cast.<br />
Und ich hoffe, dass bei dir angesichts dieser Antwort alle Alarmglocken läuten. Denn es heißt, dass die Frage keinen Sinn macht.</p>
<p>Kann es sein, dass du std::bind suchst? Ich rate nämlich mal, dass dein <em>eigentliches</em> Problem (nach dem du gleich in einem neuen Thread hättest fragen sollen) ist, dass du eine Schnittstelle hast, die einen void(*)() erwartet und du an diese Schnittstelle eine Memberfunktion eine bestimmten Objekts übergeben möchtest.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2471022</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2471022</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 14 Oct 2015 19:44:59 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionspointer - Function Pointer on Wed, 14 Oct 2015 19:56:06 GMT]]></title><description><![CDATA[<p>ich hab nach einer lösung für mein problem gesucht und auf den ersten blick sah es nach der richtigen lösung aus</p>
<p>von bind hab ich schon gelesen, war mir aber zu umständlich</p>
<p>reinterpret_cast hört sich gut an, dazu werde ich gleich mal schlau machen</p>
<p>und nochmal sorry das ich den alten Thread aufgewärmt hab</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2471023</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2471023</guid><dc:creator><![CDATA[crischan]]></dc:creator><pubDate>Wed, 14 Oct 2015 19:56:06 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionspointer - Function Pointer on Wed, 14 Oct 2015 20:24:40 GMT]]></title><description><![CDATA[<p>crischan schrieb:</p>
<blockquote>
<p>von bind hab ich schon gelesen, war mir aber zu umständlich</p>
</blockquote>
<p>bind soll umständlich sein?</p>
<blockquote>
<p>reinterpret_cast hört sich gut an, dazu werde ich gleich mal schlau machen</p>
</blockquote>
<p>Wozu fragst du überhaupt, wenn du die Antworten nicht liest? reinterpret_cast beantwortet deine (schlecht gestellte) Frage, aber es hört sich garantiert <strong>nicht</strong> gut an!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2471029</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2471029</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 14 Oct 2015 20:24:40 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionspointer - Function Pointer on Wed, 14 Oct 2015 20:36:16 GMT]]></title><description><![CDATA[<p>das was ich über bind gelesen hab, hab ich ehrlich gesagt nicht wirklich verstanden, bin noch nicht lange bei c++ und manches kommt mir manchmal etwas spanisch vor</p>
<p>aber vllt kannst du mir erklären wie das mit bind läuft</p>
<p>Ich will einen function aus einer klasse zu einer anderen function in einer klasse weiter geben und diese function speicher dann diesen zeiger in seiner klasse. hoffe ich hab das so richtig erklärt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2471031</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2471031</guid><dc:creator><![CDATA[crischan]]></dc:creator><pubDate>Wed, 14 Oct 2015 20:36:16 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionspointer - Function Pointer on Wed, 14 Oct 2015 21:05:00 GMT]]></title><description><![CDATA[<p>Die Beschreibung ist zu ungenau, um dir vernünftig helfen zu können. Am besten machst du mal einen neuen Thread mit einer brauchbaren Beschreibung deines Problems und einer Erklärung, wobei du Schwierigkeiten hast. So, wie du es gleich hattest machen sollen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2471033</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2471033</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 14 Oct 2015 21:05:00 GMT</pubDate></item></channel></rss>