<?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[Callback Funktionen in C++]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich hoffe jemand heir kann mir mit meinem Problem weiterhelfen. Ich habe einige Funktionen in C, die ich jetzt aber in C++ benötige. Einer Funktion wird dabei ein Callback Funktion als Argument übergeben:</p>
<p>Alter Code:</p>
<p>float EvaluateCurve(float f[],void *context)<br />
{<br />
.<br />
.<br />
.<br />
}</p>
<p>void test() {<br />
.<br />
.<br />
amoeba(pfp, fy, 3, .0001f, EvaluateCurve, &amp;n, (void*)&amp;p);<br />
.<br />
.<br />
}</p>
<p>Neuer Code:<br />
class Test<br />
{<br />
public:<br />
float EvaluateCurve(float f[],void *context)</p>
<p>}<br />
float (Test::*lpFunc)(float f[], void *context,) = &amp;Test::EvaluateCurve;</p>
<p>void test()<br />
{<br />
.<br />
.<br />
Test test;<br />
amoeba(pfp, fy, 3, .0001f,(test.* lpFunc)(pfp[0], &amp;p),&amp;n,(void*)&amp;p);<br />
.<br />
.<br />
}</p>
<p>Folgende Fehlermeldung erscheint beim kompilieren:<br />
error C2664: 'Test::amoeba' : cannot convert parameter 5 from 'float' to 'float (__cdecl *)(float [],void *)'</p>
<p>Weiss jemand eine Antowrt darauf, wie die Syntax auszusehen hat?</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/165098/callback-funktionen-in-c</link><generator>RSS for Node</generator><lastBuildDate>Mon, 14 Sep 2026 04:54:05 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/165098.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 15 Nov 2006 14:09:22 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Callback Funktionen in C++ on Wed, 15 Nov 2006 14:09:22 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich hoffe jemand heir kann mir mit meinem Problem weiterhelfen. Ich habe einige Funktionen in C, die ich jetzt aber in C++ benötige. Einer Funktion wird dabei ein Callback Funktion als Argument übergeben:</p>
<p>Alter Code:</p>
<p>float EvaluateCurve(float f[],void *context)<br />
{<br />
.<br />
.<br />
.<br />
}</p>
<p>void test() {<br />
.<br />
.<br />
amoeba(pfp, fy, 3, .0001f, EvaluateCurve, &amp;n, (void*)&amp;p);<br />
.<br />
.<br />
}</p>
<p>Neuer Code:<br />
class Test<br />
{<br />
public:<br />
float EvaluateCurve(float f[],void *context)</p>
<p>}<br />
float (Test::*lpFunc)(float f[], void *context,) = &amp;Test::EvaluateCurve;</p>
<p>void test()<br />
{<br />
.<br />
.<br />
Test test;<br />
amoeba(pfp, fy, 3, .0001f,(test.* lpFunc)(pfp[0], &amp;p),&amp;n,(void*)&amp;p);<br />
.<br />
.<br />
}</p>
<p>Folgende Fehlermeldung erscheint beim kompilieren:<br />
error C2664: 'Test::amoeba' : cannot convert parameter 5 from 'float' to 'float (__cdecl *)(float [],void *)'</p>
<p>Weiss jemand eine Antowrt darauf, wie die Syntax auszusehen hat?</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1175229</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1175229</guid><dc:creator><![CDATA[Tisla]]></dc:creator><pubDate>Wed, 15 Nov 2006 14:09:22 GMT</pubDate></item><item><title><![CDATA[Reply to Callback Funktionen in C++ on Wed, 15 Nov 2006 14:11:33 GMT]]></title><description><![CDATA[<p>..hab noch was vergessen:</p>
<p>Die Funktion amoeba ist in der Klasse Test wie folgt definiert:</p>
<p>int amoeba(float **p, float y[], int ndim, float ftol,float (*funk)(float [],void *context), int *nfunk, void *context);</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1175230</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1175230</guid><dc:creator><![CDATA[Tisla]]></dc:creator><pubDate>Wed, 15 Nov 2006 14:11:33 GMT</pubDate></item><item><title><![CDATA[Reply to Callback Funktionen in C++ on Wed, 15 Nov 2006 14:26:02 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/profile.php?mode=viewprofile&amp;u=9713" rel="nofollow">estartu</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/viewforum.php?f=1" rel="nofollow">MFC (Visual C++)</a> in das Forum <a href="http://www.c-plusplus.net/forum/viewforum.php?f=15" rel="nofollow">C++</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic.php?t=39405" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1175244</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1175244</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Wed, 15 Nov 2006 14:26:02 GMT</pubDate></item><item><title><![CDATA[Reply to Callback Funktionen in C++ on Wed, 15 Nov 2006 15:06:10 GMT]]></title><description><![CDATA[<p>Tisla schrieb:</p>
<blockquote>
<p>..hab noch was vergessen:</p>
<p>Die Funktion amoeba ist in der Klasse Test wie folgt definiert:</p>
<p>int amoeba(float **p, float y[], int ndim, float ftol,float (*funk)(float [],void *context), int *nfunk, void *context);</p>
</blockquote>
<p>Du verlangst hier eine Funktion, keine Methode. Der Unterschied zwischen Funktion und Methode ist, dass eine Methode von einer Klasseninstanz abhängig ist.<br />
Befindet sich Deine Funktion im Namensraum einer Klasse, so muss sie statisch sein - also eben unabhängig von der Instanz.</p>
<p>Möchtest Du einen Methodenzeiger übergeben, so lautet die Deklaration</p>
<pre><code class="language-cpp">int amoeba(float **p, float y[], int ndim, float ftol,float (Test::*funk)(float [],void *context), int *nfunk, void *context);
</code></pre>
<p>In dem Fall übergibst Du aber nur einen Zeiger auf eine Methode, aber nicht die Instanz, auf den Du die Methode anwenden kannst. Das musst Du<br />
zusätzlich übergeben oder Dir sonstwo besorgen. Eine Methode kannst Du schließlich nur in Abhängigkeit zu einer Instanz anwenden.</p>
<p>Der Aufruf sieht dann so aus:</p>
<pre><code class="language-cpp">void bla( float Test::*func( int value ) )
{
  Test t;
  Test *pt = &amp;t;

  t.*func( 1 );
  pt-&gt;*func( 2 );
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1175294</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1175294</guid><dc:creator><![CDATA[Xin]]></dc:creator><pubDate>Wed, 15 Nov 2006 15:06:10 GMT</pubDate></item><item><title><![CDATA[Reply to Callback Funktionen in C++ on Wed, 15 Nov 2006 15:51:37 GMT]]></title><description><![CDATA[<p>Also irgendwie habe ich jetzt den Überblick verloren. Die Funktionen sind jetzt folgendermassen definiert:</p>
<p>test.h:</p>
<pre><code class="language-cpp">class Test:public IntrusivePtrBase
{
public:
  float CurveEvaluation(float f[],void *context, int minRadius);
  int amoeba(float **p, float y[], int ndim, float ftol,float (ModelLUT::*funk)(float [],void *context, int minRadius), int *nfunk, void *context);
};

float (Test::*lpFunc)(float f[], void *context, int minRadius) = &amp;Test::CurveEvaluation;

typedef boost::intrusive_ptr&lt; Test &gt; SPTEST;
</code></pre>
<p>test.c</p>
<pre><code class="language-cpp">bool Test::Init()
{
....
SPTEST test;
amoeba(pfp, fy, 3, .0001f,((*test).* lpFunc)(pfp[0], &amp;p, minRadius),&amp;n,(void*)&amp;p);
.....

}
</code></pre>
<p>Leider bekomme ich immer noch den Fehler:<br />
error C2664: 'Test::amoeba' : cannot convert parameter 5 from 'float' to 'float (__thiscall Test::* )(float [],void *,int)'</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1175331</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1175331</guid><dc:creator><![CDATA[Tisla]]></dc:creator><pubDate>Wed, 15 Nov 2006 15:51:37 GMT</pubDate></item><item><title><![CDATA[Reply to Callback Funktionen in C++ on Wed, 15 Nov 2006 16:24:46 GMT]]></title><description><![CDATA[<p>Tisla schrieb:</p>
<blockquote>
<pre><code class="language-cpp">bool Test::Init()
{
  amoeba(pfp, fy, 3, .0001f,((*test).* lpFunc)(pfp[0], &amp;p, minRadius),&amp;n,(void*)&amp;p);
}
</code></pre>
</blockquote>
<p>lpFunc ist bereits vom richtigen Typ.<br />
Dein Aufruf muss lauten:</p>
<pre><code class="language-cpp">bool Test::Init()
{
  amoeba(pfp, fy, 3, .0001f, lpFunc, &amp;n,(void*)&amp;p );

  /* oder auch */

  amoeba(pfp, fy, 3, .0001f, &amp;Test::EvaluateCurve, &amp;n,(void*)&amp;p );
}
</code></pre>
<p>Du übergibst einen Methoden-Zeiger, aber Du rufst die Methode nicht auf.</p>
<p>Wenn Du das Ergebnis der Methode übergeben möchtest, musst Du schließlich nur ein float übergeben.<br />
Die Argumente für lpFunc musst Du Dir in amoeba() besorgen - oder gegebenenfalls zusätzlich der Funktion amoeba() übergeben.<br />
Der Methodenzeiger kann jedoch keine zusätzlichen Variablen mitnehmen.</p>
<p>Vergleiche das mit Deinem C Quellcode:</p>
<pre><code class="language-cpp">amoeba(pfp, fy, 3, .0001f, EvaluateCurve, &amp;n, (void*)&amp;p);
</code></pre>
<p>Hier übergibst Du ebenfalls keine Arguemnte, sondern ausschließlich einen Funktionszeiger.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1175363</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1175363</guid><dc:creator><![CDATA[Xin]]></dc:creator><pubDate>Wed, 15 Nov 2006 16:24:46 GMT</pubDate></item></channel></rss>