<?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[Funktionsaufruf über Funktionszeiger]]></title><description><![CDATA[<p>Hallo Zusammen, ich bin der Neue. <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="🙂"
    /></p>
<p>Ich habe in eine Klasse einen Funktionszeiger definiert, mit dem ich eine Funktion aufrufen will. Allerdings bekomme ich einen Fehler angezeigt. Ich habe schon (fast) überall nach einer Lösung gesucht, wurde aber nicht fündig, weshalb ich mir sorgen mache das ich hier unübliche Art zu programmieren gewählt habe. <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="🙂"
    /></p>
<p>Hier ein Auszug von der Klasse:</p>
<pre><code class="language-cpp">class GButton
{
public:
	void (*PT_GButton_Function)(void);

	static void click_Button(const Event *ev, void *data);
};
</code></pre>
<p>Dem Funktionszeiger möchte ich die Adresse der später aufzurufenden Funktion übergeben:</p>
<pre><code class="language-cpp">GButton B;
	B.PT_GButton_Function = test;
</code></pre>
<p>Der Aufruf der Funktion soll nun beim Klick auf einen Button geschehen.</p>
<pre><code class="language-cpp">void GButton::click_Button(const Event *ev, void *data)
{
	GButton::PT_GButton_Function();
}
</code></pre>
<p>Und hier beginnen die Probleme. Ich bekomme einen Compilerfehler:</p>
<p>error C2597: Ungültiger Verweis auf nicht-statischen Member 'GButton::PT_GButton_Function'</p>
<p>Ich bin mit Zeigern insgesamt noch nicht allzu sehr vertraut und kam nach langem rumprobieren zu keiner Lösung. Ich hoffe jemand kennt eine einigermaßen simple Lösung.</p>
<p>Danke schon mal im voraus.<br />
Gute Nacht Christopher.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/270588/funktionsaufruf-über-funktionszeiger</link><generator>RSS for Node</generator><lastBuildDate>Sun, 30 Aug 2026 01:15:44 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/270588.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 14 Jul 2010 23:09:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Funktionsaufruf über Funktionszeiger on Wed, 14 Jul 2010 23:09:45 GMT]]></title><description><![CDATA[<p>Hallo Zusammen, ich bin der Neue. <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="🙂"
    /></p>
<p>Ich habe in eine Klasse einen Funktionszeiger definiert, mit dem ich eine Funktion aufrufen will. Allerdings bekomme ich einen Fehler angezeigt. Ich habe schon (fast) überall nach einer Lösung gesucht, wurde aber nicht fündig, weshalb ich mir sorgen mache das ich hier unübliche Art zu programmieren gewählt habe. <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="🙂"
    /></p>
<p>Hier ein Auszug von der Klasse:</p>
<pre><code class="language-cpp">class GButton
{
public:
	void (*PT_GButton_Function)(void);

	static void click_Button(const Event *ev, void *data);
};
</code></pre>
<p>Dem Funktionszeiger möchte ich die Adresse der später aufzurufenden Funktion übergeben:</p>
<pre><code class="language-cpp">GButton B;
	B.PT_GButton_Function = test;
</code></pre>
<p>Der Aufruf der Funktion soll nun beim Klick auf einen Button geschehen.</p>
<pre><code class="language-cpp">void GButton::click_Button(const Event *ev, void *data)
{
	GButton::PT_GButton_Function();
}
</code></pre>
<p>Und hier beginnen die Probleme. Ich bekomme einen Compilerfehler:</p>
<p>error C2597: Ungültiger Verweis auf nicht-statischen Member 'GButton::PT_GButton_Function'</p>
<p>Ich bin mit Zeigern insgesamt noch nicht allzu sehr vertraut und kam nach langem rumprobieren zu keiner Lösung. Ich hoffe jemand kennt eine einigermaßen simple Lösung.</p>
<p>Danke schon mal im voraus.<br />
Gute Nacht Christopher.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1926392</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1926392</guid><dc:creator><![CDATA[TheChrissy]]></dc:creator><pubDate>Wed, 14 Jul 2010 23:09:45 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionsaufruf über Funktionszeiger on Fri, 16 Jul 2010 11:17:20 GMT]]></title><description><![CDATA[<p>...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1926397</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1926397</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 16 Jul 2010 11:17:20 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionsaufruf über Funktionszeiger on Wed, 14 Jul 2010 23:24:18 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich hab vielleicht ein Detail vergessen. Denn die Funktion Test befindet sich nicht in der Klasse, sondern ist außerhalb. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Gruß Chris</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1926398</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1926398</guid><dc:creator><![CDATA[TheChrissy]]></dc:creator><pubDate>Wed, 14 Jul 2010 23:24:18 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionsaufruf über Funktionszeiger on Wed, 14 Jul 2010 23:28:29 GMT]]></title><description><![CDATA[<p>Warum ist click_Button static?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1926399</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1926399</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 14 Jul 2010 23:28:29 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionsaufruf über Funktionszeiger on Wed, 14 Jul 2010 23:34:11 GMT]]></title><description><![CDATA[<p>Ich hab es ohne versucht. Aber dann funktioniert die Funktion nicht.</p>
<p>(Es handelt sich hierbei um die Panda3D Eingine. Also ich arbeite nicht mit der MFC. Das nurmal am Rande.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1926401</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1926401</guid><dc:creator><![CDATA[TheChrissy]]></dc:creator><pubDate>Wed, 14 Jul 2010 23:34:11 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionsaufruf über Funktionszeiger on Fri, 16 Jul 2010 11:21:03 GMT]]></title><description><![CDATA[<p>...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1926402</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1926402</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 16 Jul 2010 11:21:03 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionsaufruf über Funktionszeiger on Fri, 16 Jul 2010 11:20:56 GMT]]></title><description><![CDATA[<p>...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1926403</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1926403</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 16 Jul 2010 11:20:56 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionsaufruf über Funktionszeiger on Wed, 14 Jul 2010 23:40:00 GMT]]></title><description><![CDATA[<p>TheChrissy schrieb:</p>
<blockquote>
<p>Ich hab es ohne versucht. Aber dann funktioniert die Funktion nicht.</p>
</blockquote>
<p>Aha.<br />
Du übergibst also schon click_Button an eine Engine.<br />
Dann gibts kein this und kein this-&gt;PT_GButton_Function.<br />
Steckt der Button dann irgendwie im *ev oder *data?<br />
Dann könnte man noch (static_cast&lt;GButton*&gt;(data)-&gt;PT_GButton_Function)() aufrufen.<br />
Aber irgendwoher mußt Du den Button kriegen, wenn Du auf ein Button-Attribut zugreifen willst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1926404</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1926404</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 14 Jul 2010 23:40:00 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionsaufruf über Funktionszeiger on Wed, 14 Jul 2010 23:49:10 GMT]]></title><description><![CDATA[<p>CSpille schrieb:</p>
<blockquote>
<p>TheChrissy schrieb:</p>
<blockquote>
<p>Ich hab es ohne versucht. Aber dann funktioniert die Funktion nicht.</p>
<p>(Es handelt sich hierbei um die Panda3D Eingine. Also ich arbeite nicht mit der MFC. Das nurmal am Rande.)</p>
</blockquote>
<p>Von welchem Objekt, willst du denn den Funktionszeiger haben?</p>
<p>Der Zeiger ist ja Teil eines Objektes</p>
</blockquote>
<p>Der Zeiger soll auf eine Funktion außerhalb des Objekts zeigen.</p>
<p>Weil Ich möchte mit meiner Klasse also mehrere Buttons erstellen können (was bisher auch super klappt) nur soll jeder Button eine andere Funktion aufrufen können.</p>
<p>Deshalb möchte ich die Adresse der Funktion, die außerhalb der Klasse liegt angeben um diese dann im Zeiger in der Klasse zu speichern und beim Klick auf den Button die Funktion über den Zeiger zu öffnen.</p>
<pre><code class="language-cpp">GButton B;
	B.PT_GButton_Function = test;
</code></pre>
<p>test soll dann die aufzurufende Funktion sein.</p>
<p>EDIT:<br />
Der Button wird ja bereits von der Engine bereitgestellt.</p>
<pre><code class="language-cpp">framework.define_key(PT_GButton-&gt;get_click_event(MouseButton::one()), &quot;OwnButtonPress&quot;, &amp;click_Button, PT_GButton);
</code></pre>
<p>Beim Anklicken wird die Funktion click_Button geöffnet und dabei wird PT_GButton übergeben. Letzere ist vom Typ PGButton.</p>
<p>Den Funktionszeiger direkt an die Funktion zu liefern lief wegen der konvertierung schief. Da wollte ich mich nicht durch quälen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1926406</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1926406</guid><dc:creator><![CDATA[TheChrissy]]></dc:creator><pubDate>Wed, 14 Jul 2010 23:49:10 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionsaufruf über Funktionszeiger on Fri, 16 Jul 2010 11:20:49 GMT]]></title><description><![CDATA[<p>...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1926408</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1926408</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 16 Jul 2010 11:20:49 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionsaufruf über Funktionszeiger on Thu, 15 Jul 2010 00:22:25 GMT]]></title><description><![CDATA[<blockquote>
<p>Den Funktionszeiger direkt an die Funktion zu liefern lief wegen der konvertierung schief. Da wollte ich mich nicht durch quälen.</p>
</blockquote>
<p>Das wäre aber vielleicht das beste. Aber ich bin jetzt zu müde.</p>
<p>Aber ich hab mal in die Hilfe <a href="http://www.panda3d.org/reference/cxx/class!_panda_framework#a8cbe4d170ec020f156fc7eec048242a5" rel="nofollow">http://www.panda3d.org/reference/cxx/class!_panda_framework#a8cbe4d170ec020f156fc7eec048242a5</a> geschaut.</p>
<pre><code class="language-cpp">void PandaFramework::define_key  ( const string &amp;  event_name,  
  const string &amp;  description,  
  EventHandler::EventCallbackFunction *  function,  
  void *  data   
 );
</code></pre>
<p>Sets up a handler for the indicated key. When the key is pressed in a window, the given callback will be called. The description is a one-line description of the function of the key, for display to the user.</p>
<p>Aha, der mag am liebsten gleich eine EventHandler::EventCallbackFunction?</p>
<pre><code class="language-cpp">typedef void EventHandler::EventCallbackFunction(const Event *, void *);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1926409</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1926409</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 15 Jul 2010 00:22:25 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionsaufruf über Funktionszeiger on Thu, 15 Jul 2010 00:26:47 GMT]]></title><description><![CDATA[<p>Also, ich glaube hier ist vielleicht noch etwas aufklärung nötig. <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>
<p>GButton ist die von mir geschriebene Klasse.</p>
<p>Der Button an sich wird ja schon von der Engine bereitgestellt. Alles nötige für einen Button will ich halt immer wieder über meine Klasse erstellen können.</p>
<p>Das Hier wird von der Engine bereitgestellt. Der Button ist fertig.</p>
<pre><code class="language-cpp">PGButton *PT_GButton; 
PT_GButton = new PGButton(&quot;OwnButton&quot;);

framework.define_key(PT_GButton-&gt;get_click_event(MouseButton::one()), &quot;OwnButtonPress&quot;, &amp;click_Button, PT_GButton);
</code></pre>
<p>PT_GButton ist also der Button der angeklickt wird.<br />
Meine Klasse (GButton) bekommt lediglich alle Werte um den Button einfach erstellen zu können. Unteranderem auch die Funktion die beim klicken ausgeführt werden soll.</p>
<p>Ich will bloß die Funktion die sich dann außerhalb der Klasse befindet mit dem Funktionszeiger der in der Klasse GButton deklariert ist öffnen.</p>
<p>Mit deiner Methode kommt zwar kein Fehler mehr, doch sobald der Button erstellt wird bricht das Programm ab. Das liegt sicherlich am data.</p>
<p>Ich dachte ich könnte einfach über den Funktionszeiger die Funktion aufrufen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1926411</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1926411</guid><dc:creator><![CDATA[TheChrissy]]></dc:creator><pubDate>Thu, 15 Jul 2010 00:26:47 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionsaufruf über Funktionszeiger on Thu, 15 Jul 2010 00:29:35 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Aha, der mag am liebsten gleich eine EventHandler::EventCallbackFunction?</p>
</blockquote>
<p>Das hab ich auch schon herausgefunden, nur erwies sich die Übergabe als Problematisch, da es immer wieder konvertierungs Fehler gab.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1926413</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1926413</guid><dc:creator><![CDATA[TheChrissy]]></dc:creator><pubDate>Thu, 15 Jul 2010 00:29:35 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionsaufruf über Funktionszeiger on Thu, 15 Jul 2010 00:41:18 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">GButton B;//Dein Button
B.PT_GButton_Function = test;//Und Dein Handler

//in einer Methode von GButton:
PGButton *PT_GButton;//Buttom des Frameworks
PT_GButton = new PGButton(&quot;OwnButton&quot;);

framework.define_key(PT_GButton-&gt;get_click_event(MouseButton::one()), &quot;OwnButtonPress&quot;, &amp;click_Button, this);
//this ist der aktuelle GButton, der sich gerade seine Grafik-Objekte anlegt.
//Und genau der wird dann der click_Button als data übergeben werden. 
//Und dann kann man ihn auch mit static_cast wieder zum GBUtton machen.
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1926415</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1926415</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 15 Jul 2010 00:41:18 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionsaufruf über Funktionszeiger on Fri, 16 Jul 2010 11:20:35 GMT]]></title><description><![CDATA[<p>...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1926416</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1926416</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 16 Jul 2010 11:20:35 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionsaufruf über Funktionszeiger on Thu, 15 Jul 2010 12:42:57 GMT]]></title><description><![CDATA[<p>Danke an alle. Also das Programm startet schonmal. Den Button kann ich auch erstellen. Doch sobald ich ihn anklicke bricht das Programm mit einer &quot;Unbehandelten Ausnahme&quot; ab. Das ist die Stelle mit dem static_cast.</p>
<p>Ich hab zwar noch nie mit static_cast gearbeitet. Aber ich glaube hier bekommt der PT_GButton_Function etwas aufgedrückt was er gar nicht braucht. Denn er hat ja eigentlich keinen Bezug zum &quot;grafischen&quot; Button. Er soll ja bloß Zugriff auf eine Klasse ermöglichen, die sich außerhalb der Klasse befindet.</p>
<p>Hoffe ich bringe hier jetzt nicht alles durcheinander <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Gruß Christopher</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1926666</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1926666</guid><dc:creator><![CDATA[TheChrissy]]></dc:creator><pubDate>Thu, 15 Jul 2010 12:42:57 GMT</pubDate></item></channel></rss>