<?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[kompletter zeiger auf member-funktion]]></title><description><![CDATA[<p>ich habe das problem, das ich ums verrecken keinen zeiger auf eine memberfunktion der instanz einer klasse zuweisen kann. bei dem versuch meckert der compiler immer &quot;iso c++ forbids...&quot; blabala. das muss technisch auf jeden fall möglich sein ,also soll er es auch tun. wenn ich dieses verhalten mit irgenteiner kompileroption(ich verwende mingw) abschalten kann, gerne.</p>
<p>beispiel (die stellen, an denen ich nicht weiss, wie ich es ausformulieren<br />
soll sind auskommentiert):</p>
<pre><code>class Test
{
	private:
		int wert;

	public:
		Test(int w);
		void gibAus(void);
};

Test::Test(int w)
{
	wert=w;
}

void Test::gibAus(void)
{
	std::cout &lt;&lt; wert &lt;&lt; std::endl;
}

int main()
{
    Test  *a, *b;
    // zeigerdeklaration??? *z1, *z2,

    a=new Test(34);
    b=new Test(912);

	z1=//?? zuweisung der adresse von a-&gt;gibAus();
	z2=//?? zuweisung der adresse von b-&gt;gibAus();

	//aufruf der funktionen
	z1();
	z2();

	//ausgabe:34, 912

    delete b;
    delete a;
}
</code></pre>
<p>es soll zum schluss halt EINE zeigervariable sein, die ich dann ohne umstände ansprechen kann. wie kann ich das hinkriegen?</p>
<p>hintergrund:<br />
ich habe in meinem echten programm viele völlig verschiedene objektinstanzen mit ebenso unterschiedlichen memberfunktionen, welche ich über eine grafische steuerung(eine art virtuelle konsole mit knöpfen) ansprechen will. jedem virtuellen knopf ist dann z.b. eine memberfunktion irgenteines objktes zugeordnet. die einfachste art ist halt, beim ersten rendern(wenn die 2d-koordinaten bekannt sind) jedem mausklick ihre entsprechende memberfunktion zuzuordnen.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/236724/kompletter-zeiger-auf-member-funktion</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 16:42:48 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/236724.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 19 Mar 2009 08:55:42 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to kompletter zeiger auf member-funktion on Thu, 19 Mar 2009 08:55:42 GMT]]></title><description><![CDATA[<p>ich habe das problem, das ich ums verrecken keinen zeiger auf eine memberfunktion der instanz einer klasse zuweisen kann. bei dem versuch meckert der compiler immer &quot;iso c++ forbids...&quot; blabala. das muss technisch auf jeden fall möglich sein ,also soll er es auch tun. wenn ich dieses verhalten mit irgenteiner kompileroption(ich verwende mingw) abschalten kann, gerne.</p>
<p>beispiel (die stellen, an denen ich nicht weiss, wie ich es ausformulieren<br />
soll sind auskommentiert):</p>
<pre><code>class Test
{
	private:
		int wert;

	public:
		Test(int w);
		void gibAus(void);
};

Test::Test(int w)
{
	wert=w;
}

void Test::gibAus(void)
{
	std::cout &lt;&lt; wert &lt;&lt; std::endl;
}

int main()
{
    Test  *a, *b;
    // zeigerdeklaration??? *z1, *z2,

    a=new Test(34);
    b=new Test(912);

	z1=//?? zuweisung der adresse von a-&gt;gibAus();
	z2=//?? zuweisung der adresse von b-&gt;gibAus();

	//aufruf der funktionen
	z1();
	z2();

	//ausgabe:34, 912

    delete b;
    delete a;
}
</code></pre>
<p>es soll zum schluss halt EINE zeigervariable sein, die ich dann ohne umstände ansprechen kann. wie kann ich das hinkriegen?</p>
<p>hintergrund:<br />
ich habe in meinem echten programm viele völlig verschiedene objektinstanzen mit ebenso unterschiedlichen memberfunktionen, welche ich über eine grafische steuerung(eine art virtuelle konsole mit knöpfen) ansprechen will. jedem virtuellen knopf ist dann z.b. eine memberfunktion irgenteines objktes zugeordnet. die einfachste art ist halt, beim ersten rendern(wenn die 2d-koordinaten bekannt sind) jedem mausklick ihre entsprechende memberfunktion zuzuordnen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1682581</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1682581</guid><dc:creator><![CDATA[tenim]]></dc:creator><pubDate>Thu, 19 Mar 2009 08:55:42 GMT</pubDate></item><item><title><![CDATA[Reply to kompletter zeiger auf member-funktion on Thu, 19 Mar 2009 09:05:53 GMT]]></title><description><![CDATA[<p>tenim schrieb:</p>
<blockquote>
<p>ich habe das problem, das ich ums verrecken keinen zeiger auf eine memberfunktion der instanz einer klasse zuweisen kann. bei dem versuch meckert der compiler immer &quot;iso c++ forbids...&quot; blabala. das muss technisch auf jeden fall möglich sein ,also soll er es auch tun.</p>
</blockquote>
<p>Nein, das ist technisch eben <strong>nicht</strong> möglich. Funktionszeiger sind direkt nur für Funktionen und statische Methoden (Memberfunktionen) möglich. Nicht-statische Methoden erfordern zwei Zeiger:<br />
1. Den Zeiger auf die Instanz (<strong>a</strong>-&gt;foo())<br />
2. Den Zeiger auf die Methode (a-&gt;<strong>foo</strong>())</p>
<p>Edit: Um es dir vielleicht mal zu verdeutlichen, sei hier auf den this-Zeiger in Methoden verwiesen. Dieser this-Zeiger muss gegeben sein (Das ist der Instanzzeiger). Du kannst dir (stark vereinfacht) eine Methode &quot;void Bar::Foo()&quot; wie eine Funktion &quot;void Foo(Bar * this)&quot; vorstellen.</p>
<p>tenim schrieb:</p>
<blockquote>
<p>es soll zum schluss halt EINE zeigervariable sein, die ich dann ohne umstände ansprechen kann. wie kann ich das hinkriegen?</p>
</blockquote>
<p>In dem du nicht Funktionszeiger, sondern Funktionsobjekte (sogenannte Funktoren) verwendest. Ich verweise hier auf <a href="http://www.boost.org/doc/libs/1_38_0/doc/html/function.html" rel="nofollow">boost::function</a> und <a href="http://www.boost.org/doc/libs/1_38_0/libs/bind/bind.html" rel="nofollow">boost::bind</a> (bzw. auf deren TR1 Gegenstücke std::tr1::function und std::tr1::bind).</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1682584</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1682584</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Thu, 19 Mar 2009 09:05:53 GMT</pubDate></item><item><title><![CDATA[Reply to kompletter zeiger auf member-funktion on Thu, 19 Mar 2009 09:13:31 GMT]]></title><description><![CDATA[<p>das verstehe ich nicht. im endeffekt beinhaltet ein funktionszeiger doch nur eine adresse auf eine speicherstelle im ram, ab dem sich ausführbarer code befindet. und das ist der einsprungpunkt der memberfunktion. der muss sich ja auch irgentwo im ram befinden.</p>
<p>verstest du was ich meine? es ist doch im endeffekt völlig egal, wie viele klassen/ objekte wasweisich geschachtelt oder vererbit irgentwo liegen. im endeffekt spreche ich immer den einsprunkpunkt einer gewissen funktion im ram an.<br />
(auf unterster ebene gesehen).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1682590</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1682590</guid><dc:creator><![CDATA[tenim]]></dc:creator><pubDate>Thu, 19 Mar 2009 09:13:31 GMT</pubDate></item><item><title><![CDATA[Reply to kompletter zeiger auf member-funktion on Thu, 19 Mar 2009 09:30:23 GMT]]></title><description><![CDATA[<p>tenim schrieb:</p>
<blockquote>
<p>das verstehe ich nicht. im endeffekt beinhaltet ein funktionszeiger doch nur eine adresse auf eine speicherstelle im ram, ab dem sich ausführbarer code befindet. und das ist der einsprungpunkt der memberfunktion. der muss sich ja auch irgentwo im ram befinden.</p>
</blockquote>
<p>Die Methode Test::gibAus liegt aber nur <strong>einmal</strong> im Speicher. Der Code wird nicht für jede Instanz dupliziert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1682601</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1682601</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Thu, 19 Mar 2009 09:30:23 GMT</pubDate></item><item><title><![CDATA[Reply to kompletter zeiger auf member-funktion on Thu, 19 Mar 2009 09:35:37 GMT]]></title><description><![CDATA[<p>verstehe. und wenn sich dann in dieser einen kopie der memberfunktion auf ein objekt ausserhalb bezogen wird, kann er nicht wissen, zu welcher objektinstanz. deshalb braucht er ausserdem den objektzeiger.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1682605</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1682605</guid><dc:creator><![CDATA[tenim]]></dc:creator><pubDate>Thu, 19 Mar 2009 09:35:37 GMT</pubDate></item><item><title><![CDATA[Reply to kompletter zeiger auf member-funktion on Thu, 19 Mar 2009 09:39:05 GMT]]></title><description><![CDATA[<p>tenim schrieb:</p>
<blockquote>
<p>das verstehe ich nicht. im endeffekt beinhaltet ein funktionszeiger doch nur eine adresse auf eine speicherstelle im ram, ab dem sich ausführbarer code befindet. und das ist der einsprungpunkt der memberfunktion. der muss sich ja auch irgentwo im ram befinden.</p>
<p>verstest du was ich meine? es ist doch im endeffekt völlig egal, wie viele klassen/ objekte wasweisich geschachtelt oder vererbit irgentwo liegen. im endeffekt spreche ich immer den einsprunkpunkt einer gewissen funktion im ram an.<br />
(auf unterster ebene gesehen).</p>
</blockquote>
<p>Du weisst ja bestimmt, dass Instanzen einen <code>this</code> -Zeiger haben.<br />
Im Prinzip kannst Du Dir nichtstatische Memberfunktionen als statische Memberfunktionen vorstellen, die immer automatisch den this-Zeiger für die aktuelle Instanz als erstes Argument mitbekommen.<br />
Wenn Du nun Funktionszeiger auf nichtstatische Memberfunktionen anlegst, dann musst Du irgendwie immer auch die Instanz beisteuern, auf die sich die <em>Member</em>funktion bezieht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1682607</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1682607</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 19 Mar 2009 09:39:05 GMT</pubDate></item><item><title><![CDATA[Reply to kompletter zeiger auf member-funktion on Thu, 19 Mar 2009 12:30:52 GMT]]></title><description><![CDATA[<p>Funktionszeiger auf nicht-statische Methoden sind in C++ moeglich, auch wenn es durch die anderen Post nicht so scheint. Aber um eine solche Methode aufzurufen, musst du immer noch ein Objekt mitliefern.<br />
siehe: <a href="http://www.parashift.com/c++-faq-lite/pointers-to-members.html" rel="nofollow">http://www.parashift.com/c++-faq-lite/pointers-to-members.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1682702</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1682702</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Thu, 19 Mar 2009 12:30:52 GMT</pubDate></item><item><title><![CDATA[Reply to kompletter zeiger auf member-funktion on Thu, 19 Mar 2009 13:16:58 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<p>Funktionszeiger auf nicht-statische Methoden sind in C++ moeglich, auch wenn es durch die anderen Post nicht so scheint. Aber um eine solche Methode aufzurufen, musst du immer noch ein Objekt mitliefern.<br />
siehe: <a href="http://www.parashift.com/c++-faq-lite/pointers-to-members.html" rel="nofollow">http://www.parashift.com/c++-faq-lite/pointers-to-members.html</a></p>
</blockquote>
<p>Du solltest die Beiträge, welche vor dir geschrieben wurden, genauer lesen <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="😉"
    /><br />
Ansonsten helfen übrigens Brillen oder Kontaktlinsen. Es ist unglaublich wie viel schärfer die Welt aussieht, seit ich meine Brille habe <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="😃"
    /></p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1682753</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1682753</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Thu, 19 Mar 2009 13:16:58 GMT</pubDate></item><item><title><![CDATA[Reply to kompletter zeiger auf member-funktion on Fri, 20 Mar 2009 17:28:56 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>Du solltest die Beiträge, welche vor dir geschrieben wurden, genauer lesen <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="😉"
    /><br />
Ansonsten helfen übrigens Brillen oder Kontaktlinsen. Es ist unglaublich wie viel schärfer die Welt aussieht, seit ich meine Brille habe <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="😃"
    /></p>
<p>Grüssli</p>
</blockquote>
<p>Ich habe schon richtig gelesen. Ich differenzierte zwischen dem Abspeichern eines Methodenzeigers und der tatsaechlichen Benutzung. Fuer ersteres braucht man nur einen Zeiger und fuer letzteres benoetigt man noch ein Objekt. So wurde es in den vorherigen Post nicht dargestellt bzw. differenziert. Konkret bezog ich mich auf:</p>
<blockquote>
<p>Nein, das ist technisch eben nicht möglich. Funktionszeiger sind direkt nur für Funktionen und statische Methoden (Memberfunktionen) möglich. Nicht-statische Methoden erfordern zwei Zeiger: ...</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1683556</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1683556</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Fri, 20 Mar 2009 17:28:56 GMT</pubDate></item><item><title><![CDATA[Reply to kompletter zeiger auf member-funktion on Fri, 20 Mar 2009 20:39:45 GMT]]></title><description><![CDATA[<p>knivil hat voll und ganz Recht.<br />
Hier nochmal was auf deutsch: <a href="http://tutorial.schornboeck.net/meth_zeiger.htm" rel="nofollow">http://tutorial.schornboeck.net/meth_zeiger.htm</a></p>
<p>Zeiger auf Memberfunktionen sind moeglich - allerdings ist fuer den Aufruf eine Instanz der Klasse noetig; fuer diesen kannst (oder musst) du ebenfalls einen Zeiger erstellen, wenn du das ganze erst zur Laufzeit festlegen willst <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>Gruss<br />
Cartman</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1683635</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1683635</guid><dc:creator><![CDATA[Eric Cartman]]></dc:creator><pubDate>Fri, 20 Mar 2009 20:39:45 GMT</pubDate></item><item><title><![CDATA[Reply to kompletter zeiger auf member-funktion on Fri, 20 Mar 2009 20:59:18 GMT]]></title><description><![CDATA[<p>Ihr solltet wirklich beide nochmals die Beiträge lesen. Es hat niemand behauptet, dass dies nicht möglich sei!<br />
Nur ist das, was der OP machen will nicht möglich. Diese Beiträge da oben haben einen Zusammenhang, die stehen da nicht einfach nur einzeln rum!</p>
<p><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>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1683644</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1683644</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Fri, 20 Mar 2009 20:59:18 GMT</pubDate></item></channel></rss>