<?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 bei verschiedenen Klassen]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich versuche mich gerade mit <a href="http://www.newty.de/fpt/index.html" rel="nofollow">http://www.newty.de/fpt/index.html</a> in Funktionspointer einzuarbeiten und ohne Klassen ist das auch noch schön einfach.<br />
Nun stehe ich aber vor dem Problem, was ich machen muss, wenn ich zwei verschiedene Klassen A und B habe, die die gleiche Unterklasse Sub haben, welche wiederum eine Funktion MachWas() enthält, die eine Funktion bar() des jeweiligen Besitzers aufrufen soll.</p>
<p>Also etwa so:</p>
<pre><code>class Sub{
    void foo( void(*fkt)() );
};

class A{
    Sub sub;
    void foo();
    void bar();
};

class B{
    Sub sub;
    void foo();
    void bar();
};

void Sub::MachWas( void (*fkt)() ){
    fkt();
}

void A::foo(){
    sub.MachWas( &amp;A::bar() );
}

void B::foo(){
    sub.MachWas( &amp;B::bar() );
}
</code></pre>
<p>Wenn ich die Fehlermeldung von g++ richtig verstehe, ist void(<em>) etwas anderes als z.B. void A::(</em>), d.h. ich müßte in die Parameterliste von MachWas() noch einbauen, aus welcher Klasse, bzw. von welchem Objekt der Aufruf kommt. Könnte mir jemand dazu bitte einen Rat geben?</p>
<p>Fehlermeldung von g++ schrieb:</p>
<blockquote>
<p>test.cpp:23: error: no matching function for call to 'Sub::MachWas(int, void (A::<em>) (int))<br />
test.cpp:18: note: candidates are: int Sub::MachWas(int, void (</em>) (int))</p>
</blockquote>
<p>Viele Grüße, Chris</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/237213/funktionspointer-bei-verschiedenen-klassen</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 14:41:08 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/237213.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 25 Mar 2009 19:42:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Funktionspointer bei verschiedenen Klassen on Wed, 25 Mar 2009 19:42:17 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich versuche mich gerade mit <a href="http://www.newty.de/fpt/index.html" rel="nofollow">http://www.newty.de/fpt/index.html</a> in Funktionspointer einzuarbeiten und ohne Klassen ist das auch noch schön einfach.<br />
Nun stehe ich aber vor dem Problem, was ich machen muss, wenn ich zwei verschiedene Klassen A und B habe, die die gleiche Unterklasse Sub haben, welche wiederum eine Funktion MachWas() enthält, die eine Funktion bar() des jeweiligen Besitzers aufrufen soll.</p>
<p>Also etwa so:</p>
<pre><code>class Sub{
    void foo( void(*fkt)() );
};

class A{
    Sub sub;
    void foo();
    void bar();
};

class B{
    Sub sub;
    void foo();
    void bar();
};

void Sub::MachWas( void (*fkt)() ){
    fkt();
}

void A::foo(){
    sub.MachWas( &amp;A::bar() );
}

void B::foo(){
    sub.MachWas( &amp;B::bar() );
}
</code></pre>
<p>Wenn ich die Fehlermeldung von g++ richtig verstehe, ist void(<em>) etwas anderes als z.B. void A::(</em>), d.h. ich müßte in die Parameterliste von MachWas() noch einbauen, aus welcher Klasse, bzw. von welchem Objekt der Aufruf kommt. Könnte mir jemand dazu bitte einen Rat geben?</p>
<p>Fehlermeldung von g++ schrieb:</p>
<blockquote>
<p>test.cpp:23: error: no matching function for call to 'Sub::MachWas(int, void (A::<em>) (int))<br />
test.cpp:18: note: candidates are: int Sub::MachWas(int, void (</em>) (int))</p>
</blockquote>
<p>Viele Grüße, Chris</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1686024</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1686024</guid><dc:creator><![CDATA[Gast_Chris]]></dc:creator><pubDate>Wed, 25 Mar 2009 19:42:17 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionspointer bei verschiedenen Klassen on Wed, 25 Mar 2009 20:09:06 GMT]]></title><description><![CDATA[<p>Ähm, sorry, Sub sieht natürlich so aus</p>
<pre><code>class Sub{
    void MachWas( void(*fkt)() );
};
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1686034</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1686034</guid><dc:creator><![CDATA[Gast_Chris]]></dc:creator><pubDate>Wed, 25 Mar 2009 20:09:06 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionspointer bei verschiedenen Klassen on Wed, 25 Mar 2009 21:04:03 GMT]]></title><description><![CDATA[<p>Memberfunktions-Zeiger sind leider ein wenig schwieriger als einfache Funktionszeiger. Ich empfehle die boost-Bibliothek und daraus <code>boost::function</code> <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="🙂"
    /><br />
edit: <a href="http://www.boost.org/doc/libs/1_38_0/doc/html/function/tutorial.html#id3171589" rel="nofollow">http://www.boost.org/doc/libs/1_38_0/doc/html/function/tutorial.html#id3171589</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1686062</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1686062</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Wed, 25 Mar 2009 21:04:03 GMT</pubDate></item></channel></rss>