<?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[Ist eine Member-Function als Funktionsparameter zulässig ???]]></title><description><![CDATA[<p>Hallo,<br />
wenn ich folgenden Code compiliere, meckert der Compiler:</p>
<pre><code>class A {
public:
   void f() { /* mach was */}
   void g() { /* mach was anderes */ }
};

class B {
public:
   B () {foo (a.f);} /* &lt;== 
      error: no matching  function for call  to 'B::foo(&lt;unresolved overloaded             
     function type&gt;)'
     note: candidates are: void B::foo(void (*)()) */
private:
   void foo (void x()) {x();}
   A a;
};

int main () {
   B b;
   return 0;
}
</code></pre>
<p>Wenn ich im B-Konstruktor statt der Member-Funktion a.f eine globale Funktion h als Parameter uebergebe, dann kompilert das Programm tadellos:</p>
<pre><code>class A {
public:
   void f() { /* mach was */}
   void g() { /* mach was anderes */ }
};

void h () {}

class B {
public:
   B () { foo (h);}
private:
   void foo (void x()) {x();}
   A a;
};

int main () {
   B b;
   return 0;
}
</code></pre>
<p>Woran liegt es ?? a.f ist doch innerhalb der Klasse B sichtbar. Gibt es irgendeine Einschraenkung, dass Funktionen als Parameter keine Member-Funktionen sein duerfen ?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/211062/ist-eine-member-function-als-funktionsparameter-zulässig</link><generator>RSS for Node</generator><lastBuildDate>Tue, 13 Oct 2026 20:52:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/211062.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 18 Apr 2008 11:04:06 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Ist eine Member-Function als Funktionsparameter zulässig ??? on Fri, 18 Apr 2008 11:04:06 GMT]]></title><description><![CDATA[<p>Hallo,<br />
wenn ich folgenden Code compiliere, meckert der Compiler:</p>
<pre><code>class A {
public:
   void f() { /* mach was */}
   void g() { /* mach was anderes */ }
};

class B {
public:
   B () {foo (a.f);} /* &lt;== 
      error: no matching  function for call  to 'B::foo(&lt;unresolved overloaded             
     function type&gt;)'
     note: candidates are: void B::foo(void (*)()) */
private:
   void foo (void x()) {x();}
   A a;
};

int main () {
   B b;
   return 0;
}
</code></pre>
<p>Wenn ich im B-Konstruktor statt der Member-Funktion a.f eine globale Funktion h als Parameter uebergebe, dann kompilert das Programm tadellos:</p>
<pre><code>class A {
public:
   void f() { /* mach was */}
   void g() { /* mach was anderes */ }
};

void h () {}

class B {
public:
   B () { foo (h);}
private:
   void foo (void x()) {x();}
   A a;
};

int main () {
   B b;
   return 0;
}
</code></pre>
<p>Woran liegt es ?? a.f ist doch innerhalb der Klasse B sichtbar. Gibt es irgendeine Einschraenkung, dass Funktionen als Parameter keine Member-Funktionen sein duerfen ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1494113</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1494113</guid><dc:creator><![CDATA[Diogenes77]]></dc:creator><pubDate>Fri, 18 Apr 2008 11:04:06 GMT</pubDate></item><item><title><![CDATA[Reply to Ist eine Member-Function als Funktionsparameter zulässig ??? on Fri, 18 Apr 2008 11:06:54 GMT]]></title><description><![CDATA[<p>Ein Zeiger auf eine Memberfunktion ist was anderes als ein Funktionszeiger.</p>
<p>Ich glaube du würdest mit boost::function am glücklichsten werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1494114</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1494114</guid><dc:creator><![CDATA[The-Kenny]]></dc:creator><pubDate>Fri, 18 Apr 2008 11:06:54 GMT</pubDate></item><item><title><![CDATA[Reply to Ist eine Member-Function als Funktionsparameter zulässig ??? on Fri, 18 Apr 2008 11:08:23 GMT]]></title><description><![CDATA[<p>Methoden sind keine Funktionszeiger, weil an ihnen noch ein this-Objekt hängen muss, um aufgerufen zu werden. Sprich der Empfänger braucht die Information, welche Methode gewünscht ist (schreibt sich &amp;A::f), und die Information, welches Objekt das this-Objekt ist (in diesem Fall a). Das sind mindestens zwei Informationen, die so in einen Funktionszeiger nicht hineinpassen.</p>
<p>Am kurzen Beispiel sieht das so aus:</p>
<pre><code class="language-cpp">typedef void (A::*funcptr)(); // nur weniger Schreibarbeit

void foo(A&amp; objekt, funcptr funktion)
{
    objekt.*funktion();
}

foo(a, &amp;A::f);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1494116</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1494116</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Fri, 18 Apr 2008 11:08:23 GMT</pubDate></item><item><title><![CDATA[Reply to Ist eine Member-Function als Funktionsparameter zulässig ??? on Fri, 18 Apr 2008 11:30:19 GMT]]></title><description><![CDATA[<p>Danke fuer die Hinweise !<br />
@TheKenny: Die boost::function schaue ich mir an.<br />
<a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10648">@LordJaxom</a>: Ich habe Deine Loesung in mein Bsp. eingebaut, bekomme aber ein error. Leider bin ich noch nicht so sattelfest, weiss nicht, wie ich das beheben soll.</p>
<pre><code>class A {
public:
   void f() { /* mach was */}
   void g() { /* mach was anderes */ }
};

class B {
public:
   B () { foo (a, &amp;A::f);} 
private:
   typedef void (A::*funcptr)(); // nur weniger Schreibarbeit
   void foo(A&amp; objekt, funcptr funktion) {objekt.*funktion();}   /*&lt;== error: must use '.*' or '-&gt;*' to call pointer-to-member function in 'funktion (...)'*/

   A a;
};

int main () {
   B b;
   return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1494135</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1494135</guid><dc:creator><![CDATA[Diogenes77]]></dc:creator><pubDate>Fri, 18 Apr 2008 11:30:19 GMT</pubDate></item><item><title><![CDATA[Reply to Ist eine Member-Function als Funktionsparameter zulässig ??? on Fri, 18 Apr 2008 13:48:47 GMT]]></title><description><![CDATA[<p>du hast einfach die operatorenrangfolge vergessen: () geht vor .*</p>
<pre><code class="language-cpp">(object.*funktion)();
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1494228</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1494228</guid><dc:creator><![CDATA[queer_boy]]></dc:creator><pubDate>Fri, 18 Apr 2008 13:48:47 GMT</pubDate></item><item><title><![CDATA[Reply to Ist eine Member-Function als Funktionsparameter zulässig ??? on Fri, 18 Apr 2008 14:59:55 GMT]]></title><description><![CDATA[<p>Das war's... es flutscht !<br />
Uebrigens, die boost::function - Loesung von Kenny laeuft auch und ist ebenfalls kurz &amp; buendig !</p>
<p>muuuuuuchas gracias, amigos !!!!! <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="🙂"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1494255</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1494255</guid><dc:creator><![CDATA[Diogenes77]]></dc:creator><pubDate>Fri, 18 Apr 2008 14:59:55 GMT</pubDate></item></channel></rss>