<?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[Funktionszeiger in Klassen]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe eine Klasse &quot;Panel&quot; geschrieben, die auf Mausklicks reagiert. Die Reaktion besteht darin, das ein Funktionszeiger aufgerufen wird. Das sieht dann so aus:</p>
<pre><code class="language-cpp">typedef void (*event_function)(void);

class Panel {
  //...
protected:
  event_function OnClick;
public:
  process_events(SDL_Event* event);
  set_OnClickEvent(event_function ef);   
  //...
};

Panel::process_events(SDL_Event* event) {
  //...
  this-&gt;OnClick();
}
</code></pre>
<p>Das Problem besteht nun darin, dass ich in einer anderen Klasse nur static-Funktionen zuweisen kann:</p>
<pre><code class="language-cpp">class main_menue: public Panel {
public:
  main_menue()
  {
    this-&gt;set_OnClickEvent((SDL::Interface::event_function)OnClick_Quit);
  }
protected:
  static void OnClick_Quit(void);
};
</code></pre>
<p>Lasse ich das &quot;static&quot; weg kommt folgende Fehlermeldung:<br />
&quot;error C2440: 'Typumwandlung': 'overloaded-function' kann nicht in 'SDL::Interface::event_function' konvertiert werden&quot;</p>
<p>Ich will aber auf die Elemente von main_menue zugreifen können. Wie stelle ich das an?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/140928/funktionszeiger-in-klassen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 31 Aug 2026 10:00:30 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/140928.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 18 Mar 2006 10:00:43 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Funktionszeiger in Klassen on Sat, 18 Mar 2006 10:00:43 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe eine Klasse &quot;Panel&quot; geschrieben, die auf Mausklicks reagiert. Die Reaktion besteht darin, das ein Funktionszeiger aufgerufen wird. Das sieht dann so aus:</p>
<pre><code class="language-cpp">typedef void (*event_function)(void);

class Panel {
  //...
protected:
  event_function OnClick;
public:
  process_events(SDL_Event* event);
  set_OnClickEvent(event_function ef);   
  //...
};

Panel::process_events(SDL_Event* event) {
  //...
  this-&gt;OnClick();
}
</code></pre>
<p>Das Problem besteht nun darin, dass ich in einer anderen Klasse nur static-Funktionen zuweisen kann:</p>
<pre><code class="language-cpp">class main_menue: public Panel {
public:
  main_menue()
  {
    this-&gt;set_OnClickEvent((SDL::Interface::event_function)OnClick_Quit);
  }
protected:
  static void OnClick_Quit(void);
};
</code></pre>
<p>Lasse ich das &quot;static&quot; weg kommt folgende Fehlermeldung:<br />
&quot;error C2440: 'Typumwandlung': 'overloaded-function' kann nicht in 'SDL::Interface::event_function' konvertiert werden&quot;</p>
<p>Ich will aber auf die Elemente von main_menue zugreifen können. Wie stelle ich das an?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1018855</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1018855</guid><dc:creator><![CDATA[user0]]></dc:creator><pubDate>Sat, 18 Mar 2006 10:00:43 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionszeiger in Klassen on Sat, 18 Mar 2006 11:05:55 GMT]]></title><description><![CDATA[<p>Klassenmethoden werden in C++ anders behandelt and normale Funktionen. Ein Methodenzeiger sieht so aus:</p>
<pre><code class="language-cpp">struct MyClass
{
   void tuewas(){
      cout &lt;&lt; &quot;MyClass::tuewas()\n&quot;;
   }
};

int main()
{
  // Methoden-Typ nimmt nur Funktionen von MyClass an. 
  // Mit entsprechender Signatur natürlich
  typedef void (MyClass::*Func)(); 

  MyClass obj;
  Func func = &amp;MyClass::Func; // Hier die Zuweisung

  (obj.*func)(); // hier der Aufruf
  ...
}
</code></pre>
<p>Erstelle aber besser einen eigenen Funktor. Dieser Kapselt dann Funktionszeiger und Methodenzeiger.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1018886</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1018886</guid><dc:creator><![CDATA[funktor]]></dc:creator><pubDate>Sat, 18 Mar 2006 11:05:55 GMT</pubDate></item></channel></rss>