<?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[Zeiger auf Memberfunktion]]></title><description><![CDATA[<p>Hallo!</p>
<p>Habe folgende Klassen:</p>
<pre><code class="language-cpp">class C
{
private :

   void (*FunctionToCall)(char*) ;

public :

   void SetFunctionToCall( void (*parFunc)(char*) )
   {
      FunctionToCall =  parFunc  ;
   }

   void Test()
   {
      FunctionToCall( &quot;Hallo&quot; );
   }

};

class B
{
protected :

public :

   C *pC ;

   B()
   {
      pC = new C() ;
   }

   void SetFunctionToCall( void (*parFunc)(char*) )    
   {
      pC-&gt;SetFunctionToCall( parFunc ) ;
   }
};

class A : public B
{

public :

   void Function( char *ac )
   {
      int i = 0 ;    // Nur für breakpoint
   }

   A()
   {
      SetFunctionToCall( Function ) ;              // Zeile 65
   }

};
</code></pre>
<p>In main:</p>
<pre><code class="language-cpp">A a ;

   a.pC-&gt;Test();
</code></pre>
<p>Bekomme folgenden Fehler:</p>
<p>[C++ Error] Unit1.cpp(65): E2342 Type mismatch in parameter 'parFunc' (wanted 'void (*)(char *)', got 'void')</p>
<p>Was mache ich falsch?</p>
<p>Ich weiss, ich könnte einen Pointer auf Objekt a übergeben und dann die Funktion aufrufen. Ich würde es aber lieber so machen, wenn es geht. Dass in main Test aufgerufen wird, ist eben nur ein Test. In Wirklichkeit ist C eine Klasse zur Kommunikation über MQS und eine empfangene Nachricht soll an eine übergeordnete Klasse weitergegeben werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/165113/zeiger-auf-memberfunktion</link><generator>RSS for Node</generator><lastBuildDate>Mon, 14 Sep 2026 04:13:29 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/165113.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 15 Nov 2006 15:59:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zeiger auf Memberfunktion on Wed, 15 Nov 2006 15:59:04 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Habe folgende Klassen:</p>
<pre><code class="language-cpp">class C
{
private :

   void (*FunctionToCall)(char*) ;

public :

   void SetFunctionToCall( void (*parFunc)(char*) )
   {
      FunctionToCall =  parFunc  ;
   }

   void Test()
   {
      FunctionToCall( &quot;Hallo&quot; );
   }

};

class B
{
protected :

public :

   C *pC ;

   B()
   {
      pC = new C() ;
   }

   void SetFunctionToCall( void (*parFunc)(char*) )    
   {
      pC-&gt;SetFunctionToCall( parFunc ) ;
   }
};

class A : public B
{

public :

   void Function( char *ac )
   {
      int i = 0 ;    // Nur für breakpoint
   }

   A()
   {
      SetFunctionToCall( Function ) ;              // Zeile 65
   }

};
</code></pre>
<p>In main:</p>
<pre><code class="language-cpp">A a ;

   a.pC-&gt;Test();
</code></pre>
<p>Bekomme folgenden Fehler:</p>
<p>[C++ Error] Unit1.cpp(65): E2342 Type mismatch in parameter 'parFunc' (wanted 'void (*)(char *)', got 'void')</p>
<p>Was mache ich falsch?</p>
<p>Ich weiss, ich könnte einen Pointer auf Objekt a übergeben und dann die Funktion aufrufen. Ich würde es aber lieber so machen, wenn es geht. Dass in main Test aufgerufen wird, ist eben nur ein Test. In Wirklichkeit ist C eine Klasse zur Kommunikation über MQS und eine empfangene Nachricht soll an eine übergeordnete Klasse weitergegeben werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1175335</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1175335</guid><dc:creator><![CDATA[GV]]></dc:creator><pubDate>Wed, 15 Nov 2006 15:59:04 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Memberfunktion on Wed, 15 Nov 2006 16:31:35 GMT]]></title><description><![CDATA[<p>Bitte lies Dir folgenden Thread durch, meine erste Antwort.</p>
<p>Du versuchst eine Methode als Funktion zu übergeben.<br />
Alternativ musst Du wie dort beschrieben Methoden-Zeiger benutzen.</p>
<p><a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-165098.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-165098.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1175368</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1175368</guid><dc:creator><![CDATA[Xin]]></dc:creator><pubDate>Wed, 15 Nov 2006 16:31:35 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Memberfunktion on Wed, 15 Nov 2006 16:45:21 GMT]]></title><description><![CDATA[<blockquote>
<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>
</blockquote>
<p>Das heisst also, C muss auf jeden Fall Objekt a kennen.<br />
Na, dann werd ich halt doch den Pointer übergeben.</p>
<p>Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1175381</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1175381</guid><dc:creator><![CDATA[GV]]></dc:creator><pubDate>Wed, 15 Nov 2006 16:45:21 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Memberfunktion on Wed, 15 Nov 2006 16:57:56 GMT]]></title><description><![CDATA[<p>GV schrieb:</p>
<blockquote>
<blockquote>
<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>
</blockquote>
<p>Das heisst also, C muss auf jeden Fall Objekt a kennen.<br />
Na, dann werd ich halt doch den Pointer übergeben.</p>
<p>Danke.</p>
</blockquote>
<p>???</p>
<p>Die Frage ist wohl eher, was Du übergeben möchtest... den Hinweis die übergebene Funktion zu benutzen, den Hinweis die übergebene Methode auf eine beliebige Instanz zu benutzen oder eben etwas festgelegtes mit einer übergebenen Instanz zu machen.</p>
<p>Das hängt ein wenig mit dem zusammen, was Du eigentlich programmieren möchtest <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/1175391</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1175391</guid><dc:creator><![CDATA[Xin]]></dc:creator><pubDate>Wed, 15 Nov 2006 16:57:56 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Memberfunktion on Wed, 15 Nov 2006 17:04:40 GMT]]></title><description><![CDATA[<p>C = Instanz C, nicht Sprache C/C++ ^^</p>
<p>Nein, C muss A nicht kennen, aber C muss sich selber kennen.<br />
Da FunctionToCall nicht von A abhängt, muss es eine Funktion sein, also statisch sein, wenn es im Namensraum der Klasse existieren soll.</p>
<p>Dann kannst Du FunctionToCall jederzeit rufen, wie Du eine beliebige statische Function rufen kannst.</p>
<p>Du übergibst aber eine Methode, die ist von A abhängig, Du musst dich also entscheiden, was Du machen möchtest. Entweder einen Funktionszeiger, der auf eine statische Funktion von A zeigen kann oder ein Methodenzeiger, der aber nur mit einer beliebigen A-Instanz verwendet werden darf.</p>
<p>Ich hoffe, das hilft Dir beim Verständnis weiter.</p>
<p>//Edit: Vielleicht hilft es Dir beim Verständnis, wenn Du A::Function einfach mal statisch deklarierst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1175396</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1175396</guid><dc:creator><![CDATA[Xin]]></dc:creator><pubDate>Wed, 15 Nov 2006 17:04:40 GMT</pubDate></item></channel></rss>