<?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[Member-Funktionen als Parameter uebergeben]]></title><description><![CDATA[<p>Hallo allerseits,</p>
<p>folgendes Vorhaben (in verk&quot;urzter Form, also nur das wesentliche):<br />
Innerhalb einer Klasse &quot;C&quot; werde die Member-Funktion &quot;evaluate&quot;<br />
als Parameter in eine Funktion &quot;integrate&quot; gegeben. (Das C.h lasse<br />
ich hier mal weg.)</p>
<p>file C.cpp</p>
<pre><code class="language-cpp">...
class C
{
  double evaluate(double x){
    //Implementation von evaluate. Z.B. Interpoliert es einen R&quot;uckgabewert
    //anhand Objektspezifischer privater Daten (ein in C.h deklariertes array).
  }

  double calc_integrals(...)
  {
    ...
    double x = integrate(evaluate, a,b);  //error-Zeile
    double y = integrate(evaluate, c,d);  //error-Zeile
    ...
  }
}
</code></pre>
<p>Funktion &quot;integrate&quot; enstamme einer entsprechenden Algorithmensammlung mit<br />
der Deklaration:<br />
double integrate(double func(double) , double a, double b);</p>
<p>Sinnhaftigerweise gibt es viele Objekte des Typs C mit ihren spezifischen<br />
Daten. Jedes Objekt hat seine eigenen Integrale. Ich gehe davon aus,<br />
dass evaluate (aufgerufen innerhalb integrate)<br />
auf die in dem aktuellen Objekt vorhandenen Daten zugreift.</p>
<p>Nun gibt der compiler die Fehlermeldung:</p>
<pre><code>error: argument of type ‘double (C::)(double)’ does not match ‘double (*)(double)
</code></pre>
<p>Meine Verst&quot;andnis: Statt einen Zeiger auf eine double-Funktion bekommt<br />
integrate ein (C::) Ich stelle fest, dass der Aufruf mitsamt Zigriffsoperator<br />
keinen Unterschied macht. Zudem sollte es auch eindeutig sein welche evaluate gemeint ist.</p>
<p>Mit Gew&quot;ohnung an eine funktionale Sprache und Matlab vermag ich<br />
aus der Literatur nicht festzustellen, wie es in diesem Fall bei<br />
Member-Funktionen gemacht werden muss. Genau den Fall habe ich nicht gefunden.<br />
Ich hoffe um unn&quot;otig einzuf&quot;uhrende Zeiger etc. herumzukommen.<br />
Das sog. currying gibt es in C++ angeblich so ohne weiteres nicht.</p>
<p>Gruss und dankend im Voraus:)<br />
Daniel</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/121101/member-funktionen-als-parameter-uebergeben</link><generator>RSS for Node</generator><lastBuildDate>Sat, 22 Aug 2026 14:43:40 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/121101.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 19 Sep 2005 21:31:53 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Member-Funktionen als Parameter uebergeben on Mon, 19 Sep 2005 21:31:53 GMT]]></title><description><![CDATA[<p>Hallo allerseits,</p>
<p>folgendes Vorhaben (in verk&quot;urzter Form, also nur das wesentliche):<br />
Innerhalb einer Klasse &quot;C&quot; werde die Member-Funktion &quot;evaluate&quot;<br />
als Parameter in eine Funktion &quot;integrate&quot; gegeben. (Das C.h lasse<br />
ich hier mal weg.)</p>
<p>file C.cpp</p>
<pre><code class="language-cpp">...
class C
{
  double evaluate(double x){
    //Implementation von evaluate. Z.B. Interpoliert es einen R&quot;uckgabewert
    //anhand Objektspezifischer privater Daten (ein in C.h deklariertes array).
  }

  double calc_integrals(...)
  {
    ...
    double x = integrate(evaluate, a,b);  //error-Zeile
    double y = integrate(evaluate, c,d);  //error-Zeile
    ...
  }
}
</code></pre>
<p>Funktion &quot;integrate&quot; enstamme einer entsprechenden Algorithmensammlung mit<br />
der Deklaration:<br />
double integrate(double func(double) , double a, double b);</p>
<p>Sinnhaftigerweise gibt es viele Objekte des Typs C mit ihren spezifischen<br />
Daten. Jedes Objekt hat seine eigenen Integrale. Ich gehe davon aus,<br />
dass evaluate (aufgerufen innerhalb integrate)<br />
auf die in dem aktuellen Objekt vorhandenen Daten zugreift.</p>
<p>Nun gibt der compiler die Fehlermeldung:</p>
<pre><code>error: argument of type ‘double (C::)(double)’ does not match ‘double (*)(double)
</code></pre>
<p>Meine Verst&quot;andnis: Statt einen Zeiger auf eine double-Funktion bekommt<br />
integrate ein (C::) Ich stelle fest, dass der Aufruf mitsamt Zigriffsoperator<br />
keinen Unterschied macht. Zudem sollte es auch eindeutig sein welche evaluate gemeint ist.</p>
<p>Mit Gew&quot;ohnung an eine funktionale Sprache und Matlab vermag ich<br />
aus der Literatur nicht festzustellen, wie es in diesem Fall bei<br />
Member-Funktionen gemacht werden muss. Genau den Fall habe ich nicht gefunden.<br />
Ich hoffe um unn&quot;otig einzuf&quot;uhrende Zeiger etc. herumzukommen.<br />
Das sog. currying gibt es in C++ angeblich so ohne weiteres nicht.</p>
<p>Gruss und dankend im Voraus:)<br />
Daniel</p>
]]></description><link>https://www.c-plusplus.net/forum/post/876158</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/876158</guid><dc:creator><![CDATA[DanielInMarburg]]></dc:creator><pubDate>Mon, 19 Sep 2005 21:31:53 GMT</pubDate></item><item><title><![CDATA[Reply to Member-Funktionen als Parameter uebergeben on Tue, 20 Sep 2005 05:12:21 GMT]]></title><description><![CDATA[<p>du müsstest an evaluate auch einen double-Wert übergeben, weil du die Methode lediglich mit evaluate aufrufst (was genau genommen kein Methodenaufruf ist, müsste zumindest evaluate() dort stehen), und du keinen Default-Wert für dein x in evaluate hast, is ja irgendwie klar, dass es eigentlich nicht funktionieren kann, für nen Methodenaufruf von evaluate bräuchtest du zumindest schon mal Klammern und dann halt noch nen Übergabewert, wie z.B.<br />
double x = integrate(evaluate(3.15),a,b);<br />
Vllt könnte das helfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/876220</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/876220</guid><dc:creator><![CDATA[Vorden]]></dc:creator><pubDate>Tue, 20 Sep 2005 05:12:21 GMT</pubDate></item><item><title><![CDATA[Reply to Member-Funktionen als Parameter uebergeben on Tue, 20 Sep 2005 06:35:37 GMT]]></title><description><![CDATA[<p>Ich denke nicht, dass es so ist.<br />
Die Funktion integrals möchte ja einen Funktionspointer double func(double) und nicht das Ergebnis, was evalutate(2.4) ja bringen würde.<br />
Es wird eher so sein, dass integrals intern evaluate mit einem seiner double-Parameter aufruft.</p>
<p>Das Problem ist eher, dass evaluate eine Klassenmethode ist und daher die Signatur<br />
double C::evaluate(double) und nicht double evalutate(double) hat.<br />
Ändere die Definition von integrals.<br />
Von</p>
<pre><code class="language-cpp">double integrals(double func(double), double, double);
// nach
double integrals(double C::func(double), double, double);
</code></pre>
<p>So weiß der Compiler, dass er eine Methode von C als Zeiger bekommt.<br />
Da das ganze innerhalb einer Klasse passiert, dürfte es soweit klappen.</p>
<p>Viel Erfolg!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/876249</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/876249</guid><dc:creator><![CDATA[hehejo]]></dc:creator><pubDate>Tue, 20 Sep 2005 06:35:37 GMT</pubDate></item><item><title><![CDATA[Reply to Member-Funktionen als Parameter uebergeben on Tue, 20 Sep 2005 08:33:36 GMT]]></title><description><![CDATA[<p>Dank dem Hinweis von hehejo, er/sie hatte den Sinn des Programms verstanden.</p>
<p>Den Vorschlag hatte ich jedoch schon ausprobiert (obwohl es nicht sein d&quot;urfte, die Funktion &quot;integrals&quot;, ausschliesslich auf Memberfunktionen von C als Parameter zu beschr&quot;anken zu m&quot;ussen). Jedenfalls kommt mit der Deklaration von &quot;integrate&quot; (nicht &quot;integrals&quot;, gell) der Art:</p>
<pre><code class="language-cpp">#include&quot;C.h&quot;
double integrate(double C::func(double) , double a, double b);
</code></pre>
<p>dabei ein Syntax fehler raus:</p>
<p>error: expected unqualified-id before ‘(’ token<br />
error: expected ‘,’ or ‘...’ before ‘(’ token</p>
<p>Anbei: &quot;integrate&quot; befindet sich ausserhalb der Klasse C.</p>
<p>hm..?!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/876336</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/876336</guid><dc:creator><![CDATA[DanielInMarburg]]></dc:creator><pubDate>Tue, 20 Sep 2005 08:33:36 GMT</pubDate></item><item><title><![CDATA[Reply to Member-Funktionen als Parameter uebergeben on Tue, 20 Sep 2005 09:09:27 GMT]]></title><description><![CDATA[<p>Bin mir net sicher, aber haben Funktion-Pointer net immer die Syntax<br />
(rückgabeWert)(*fct)(parameter)?<br />
Dann müsste des doch<br />
double integrate((double) (<em>C::func(double) , double a, double b);<br />
ne des ist mir zu kompliziert, schreib doch so was in der Art<br />
typedef FCTPTR (double)(</em>)(double);<br />
double integrate(FCTPTR fct,double a, double b);</p>
]]></description><link>https://www.c-plusplus.net/forum/post/876361</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/876361</guid><dc:creator><![CDATA[rene1]]></dc:creator><pubDate>Tue, 20 Sep 2005 09:09:27 GMT</pubDate></item></channel></rss>