<?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[Methodenzeiger -&amp;gt; Laufzeitfehler]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>möchte gerne meinen Code ungefähr in der folgenden Art und Weise realisieren:</p>
<pre><code class="language-cpp">// Klasse UserInterface
class UserInterface
{
public:
	UserInterface(void);
	~UserInterface(void);

	void Action();
}

UserInterface::UserInterface()
{
	Button* b = new Button(&amp;UserInterface::Action); // &lt;- Runtime Error
}

// Klasse Button
class Button
{
public:
	Button(void);
	Button(void (UserInterface::*click)());
	~Button(void);

private:
	void (UserInterface::*on_click)();
}

Button::Button(void (UserInterface::*click)())
{
	on_click = click;
}
</code></pre>
<p>Leider bekomme ich hierbei immer einen Laufzeitfehler:</p>
<blockquote>
<p>Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.</p>
</blockquote>
<p>Was mache ich falsch? <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>Vielen Dank euch schon einmal <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/213617/methodenzeiger-gt-laufzeitfehler</link><generator>RSS for Node</generator><lastBuildDate>Wed, 14 Oct 2026 04:40:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/213617.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 19 May 2008 19:11:40 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Methodenzeiger -&amp;gt; Laufzeitfehler on Mon, 19 May 2008 19:11:40 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>möchte gerne meinen Code ungefähr in der folgenden Art und Weise realisieren:</p>
<pre><code class="language-cpp">// Klasse UserInterface
class UserInterface
{
public:
	UserInterface(void);
	~UserInterface(void);

	void Action();
}

UserInterface::UserInterface()
{
	Button* b = new Button(&amp;UserInterface::Action); // &lt;- Runtime Error
}

// Klasse Button
class Button
{
public:
	Button(void);
	Button(void (UserInterface::*click)());
	~Button(void);

private:
	void (UserInterface::*on_click)();
}

Button::Button(void (UserInterface::*click)())
{
	on_click = click;
}
</code></pre>
<p>Leider bekomme ich hierbei immer einen Laufzeitfehler:</p>
<blockquote>
<p>Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.</p>
</blockquote>
<p>Was mache ich falsch? <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>Vielen Dank euch schon einmal <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1512561</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1512561</guid><dc:creator><![CDATA[Bloops]]></dc:creator><pubDate>Mon, 19 May 2008 19:11:40 GMT</pubDate></item><item><title><![CDATA[Reply to Methodenzeiger -&amp;gt; Laufzeitfehler on Mon, 19 May 2008 20:17:14 GMT]]></title><description><![CDATA[<p>Was soll das denn machen? Du übergibst die Adresse einer Funktion, oder wie?</p>
<pre><code class="language-cpp">UserInterface::UserInterface()
{
    Button* b = new Button(&amp;UserInterface::Action); // &lt;- Runtime Error
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1512609</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1512609</guid><dc:creator><![CDATA[dust]]></dc:creator><pubDate>Mon, 19 May 2008 20:17:14 GMT</pubDate></item><item><title><![CDATA[Reply to Methodenzeiger -&amp;gt; Laufzeitfehler on Mon, 19 May 2008 20:30:31 GMT]]></title><description><![CDATA[<p>Du willst wohl so etwas, wie das hier:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;

class class1
{
public:
	void ausgabe ()
	{ 		
		std::cout &lt;&lt; &quot;Funktion Klasse 1&quot; &lt;&lt; std::endl;
	}
};

class class2
{
public:
	void ausgabe2 () 
	{
		std::cout &lt;&lt; &quot;Funktion Klasse 2&quot; &lt;&lt; std::endl;
	}
};

class button
{
public:
	template&lt;class t&gt; void  click (t* pt,void (t::* f)() ) { (pt-&gt;*f) ();} 
};

int main()
{
	class1 g;
	class2 h;

	button b;

	b.click (&amp;g, &amp;class1::ausgabe);
	b.click (&amp;h, &amp;class2::ausgabe2);

	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1512617</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1512617</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Mon, 19 May 2008 20:30:31 GMT</pubDate></item><item><title><![CDATA[Reply to Methodenzeiger -&amp;gt; Laufzeitfehler on Tue, 20 May 2008 09:11:59 GMT]]></title><description><![CDATA[<p>dust schrieb:</p>
<blockquote>
<p>Was soll das denn machen? Du übergibst die Adresse einer Funktion, oder wie?</p>
</blockquote>
<p>Ganz genau. <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>drakon schrieb:</p>
<blockquote>
<p>Du willst wohl so etwas, wie das hier:</p>
</blockquote>
<p>Najaaa... Nicht ganz. Mir ist nicht ganz klar, wofür ich jetzt Templates nutzen sollte, und um den Aufruf des Funktionspointers gehts ja auch (noch) nicht.</p>
<p>Was ich möchte, ist eigentlich einfach genau folgendes:</p>
<p>Klasse A erstellt in ihrem Konstruktor ein Objekt von Klasse B und übergibt dabei dem Konstruktor von Klasse B eine Adresse auf eine Memberfunktion von Klasse A. Klasse B soll dann diese Adresse in einer privaten Membervariable von sich abspeichern.</p>
<p>Also mein obiger Code kompiliert ja anstandslos (also der vollständige <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="😉"
    /> ), aber es gibt halt diesen blöden Laufzeitfehler... Die Frage ist also: Was ist daran (so, wie er ist) falsch? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1512841</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1512841</guid><dc:creator><![CDATA[Bloops]]></dc:creator><pubDate>Tue, 20 May 2008 09:11:59 GMT</pubDate></item><item><title><![CDATA[Reply to Methodenzeiger -&amp;gt; Laufzeitfehler on Tue, 20 May 2008 09:13:28 GMT]]></title><description><![CDATA[<p>An dem Code ist an sich nichts fehlerhaftes. Der Fehler liegt woanders.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1512842</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1512842</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 20 May 2008 09:13:28 GMT</pubDate></item><item><title><![CDATA[Reply to Methodenzeiger -&amp;gt; Laufzeitfehler on Tue, 20 May 2008 09:24:39 GMT]]></title><description><![CDATA[<p>Bloops schrieb:</p>
<blockquote>
<p>...</p>
</blockquote>
<p>Mir fehlt bei dem Ganzen noch der Instanzzeiger, oder habe ich etwas übersehen (Ein Methodenzeiger auf eine nicht-statische Funktion erfordert neben den Funktionszeiger auch noch den Instanzzeiger...).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1512854</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1512854</guid><dc:creator><![CDATA[asc@ausgeloggt]]></dc:creator><pubDate>Tue, 20 May 2008 09:24:39 GMT</pubDate></item><item><title><![CDATA[Reply to Methodenzeiger -&amp;gt; Laufzeitfehler on Tue, 20 May 2008 09:29:48 GMT]]></title><description><![CDATA[<p>asc@ausgeloggt schrieb:</p>
<blockquote>
<p>Mir fehlt bei dem Ganzen noch der Instanzzeiger, oder habe ich etwas übersehen (Ein Methodenzeiger auf eine nicht-statische Funktion erfordert neben den Funktionszeiger auch noch den Instanzzeiger...).</p>
</blockquote>
<p>Den braucht man beim Aufruf, klar. Den sehe ich hier aber noch nicht, demnach dürfte hier nix krachen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1512857</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1512857</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 20 May 2008 09:29:48 GMT</pubDate></item><item><title><![CDATA[Reply to Methodenzeiger -&amp;gt; Laufzeitfehler on Tue, 20 May 2008 09:36:04 GMT]]></title><description><![CDATA[<p>Falls das mit Visual C++ passiert: benutz mal zum Testen die Compilerschalter /vmg und /vmv mit dem gesamten Projekt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1512861</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1512861</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 20 May 2008 09:36:04 GMT</pubDate></item><item><title><![CDATA[Reply to Methodenzeiger -&amp;gt; Laufzeitfehler on Tue, 20 May 2008 09:51:06 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>Falls das mit Visual C++ passiert: benutz mal zum Testen die Compilerschalter /vmg und /vmv mit dem gesamten Projekt.</p>
</blockquote>
<p>Ich werd irre <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> Jezz gehts... Woher soll man als Normalsterblicher so etwas wissen? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
<p>Tausend Dank. Nur /vmg scheint übrigens zu reichen, da /vmv ja anscheinend der def-wert ist. Irre.</p>
<p>thx a lot</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1512876</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1512876</guid><dc:creator><![CDATA[Bloops]]></dc:creator><pubDate>Tue, 20 May 2008 09:51:06 GMT</pubDate></item><item><title><![CDATA[Reply to Methodenzeiger -&amp;gt; Laufzeitfehler on Tue, 20 May 2008 10:05:55 GMT]]></title><description><![CDATA[<p>Das ist so eine von den Compilererweiterungen, für die Visual C++ berüchtigt ist - diese Optimierung ist für sich genommen gar nicht so schlecht, aber es wäre schön, wenn es sich nicht um eine Standardeinstellung handelte, schließlich ist dieses Verhalten auch nicht standardkonform. Wenn möglich, solltest du dafür sorgen, dass die Klasse UserInterface definiert wurde, bevor die Klasse Button definiert wird (Im Grundsatz: Jede Klasse sollte definiert sein, bevor ein Objekt eines Zeigers auf eine Memberfunktion dieser Klasse definiert wird - das ist fast immer möglich). Dann bedarf es keiner besonderen Compilereinstellungen, was nur von Vorteil sein kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1512887</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1512887</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 20 May 2008 10:05:55 GMT</pubDate></item><item><title><![CDATA[Reply to Methodenzeiger -&amp;gt; Laufzeitfehler on Tue, 20 May 2008 15:29:58 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>Jede Klasse sollte definiert sein, bevor ein Objekt eines Zeigers auf eine Memberfunktion dieser Klasse definiert wird - das ist fast immer möglich). Dann bedarf es keiner besonderen Compilereinstellungen, was nur von Vorteil sein kann.</p>
</blockquote>
<p>Jo, habe es jetzt auch ohne die Compilereinstellung hinbekommen. Viele Dank Dir noch einmal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1513180</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1513180</guid><dc:creator><![CDATA[Bloops]]></dc:creator><pubDate>Tue, 20 May 2008 15:29:58 GMT</pubDate></item></channel></rss>