<?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]]></title><description><![CDATA[<p>Hi,</p>
<p>ich spiel ein wenig mit Funktionszeiger herum und bin auf ein Fehlermeldung gestoßen, bei der ich nicht weiter weiß. Mein Compiler teilt mir mit:</p>
<pre><code>error C2475: 'taskHELLO_WORLD::execute': Erstellen eines Zeigers auf einen Member erfordert die explizite Verwendung des Adressoperators ('&amp;')
und einen gekennzeichneten Namen
</code></pre>
<p>So so.<br />
Wenn mir jemand erklären könnte, was er mit einem gekennzeichneten Namen meint, wäre ich dankbar. Denn Adressoperator benutzte ich:</p>
<pre><code>_pfGetInterface task::getInterface(int iWich)
{
	_pfGetInterface pfTaskExecute = 0;
	iWich--;
	switch(iWich){
		case HELLO_WORLD:{
			taskHELLO_WORLD oTaskHELLO_WORLD;
			pfTaskExecute = &amp;oTaskHELLO_WORLD.execute;
			break;
		}
		case DECLARATIONS:{
			taskDECLARATIONS oTaskDECLARATIONS;
			pfTaskExecute = &amp;oTaskDECLARATIONS.execute;
			break;
		}
		case SIZE_OF:{
			taskSIZE_OF oTaskSIZE_OF;
			pfTaskExecute = &amp;oTaskSIZE_OF.execute;
			break;
		}
		case ALL_CHARS:{
			taskALL_CHARS oTaskALL_CHARS;
			pfTaskExecute = &amp;oTaskALL_CHARS.execute;
			break;
		}
		case VALUE_RANGES:{
			taskVALUE_RANGES oTaskVALUE_RANGES;
			pfTaskExecute = &amp;oTaskVALUE_RANGES.execute;
			break;
		}
		default:{
			return pfTaskExecute;
			break;
		}
	}
}
</code></pre>
<p>_pfGetInterface sieht so aus:</p>
<pre><code>typedef void (*_pfGetInterface)();
</code></pre>
<p>und taskHELLO_WORLD so:</p>
<pre><code>class taskHELLO_WORLD : task
{
public:
	static void execute();
};
</code></pre>
<p>Vieleicht kann mir auch direkt jemand erklären, warum ich keine Zeiger auf nicht statische Memberfunktionen machen kann?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/215256/funktionszeiger</link><generator>RSS for Node</generator><lastBuildDate>Mon, 12 Oct 2026 20:17:45 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/215256.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 08 Jun 2008 14:06:21 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Funktionszeiger on Sun, 08 Jun 2008 14:06:21 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich spiel ein wenig mit Funktionszeiger herum und bin auf ein Fehlermeldung gestoßen, bei der ich nicht weiter weiß. Mein Compiler teilt mir mit:</p>
<pre><code>error C2475: 'taskHELLO_WORLD::execute': Erstellen eines Zeigers auf einen Member erfordert die explizite Verwendung des Adressoperators ('&amp;')
und einen gekennzeichneten Namen
</code></pre>
<p>So so.<br />
Wenn mir jemand erklären könnte, was er mit einem gekennzeichneten Namen meint, wäre ich dankbar. Denn Adressoperator benutzte ich:</p>
<pre><code>_pfGetInterface task::getInterface(int iWich)
{
	_pfGetInterface pfTaskExecute = 0;
	iWich--;
	switch(iWich){
		case HELLO_WORLD:{
			taskHELLO_WORLD oTaskHELLO_WORLD;
			pfTaskExecute = &amp;oTaskHELLO_WORLD.execute;
			break;
		}
		case DECLARATIONS:{
			taskDECLARATIONS oTaskDECLARATIONS;
			pfTaskExecute = &amp;oTaskDECLARATIONS.execute;
			break;
		}
		case SIZE_OF:{
			taskSIZE_OF oTaskSIZE_OF;
			pfTaskExecute = &amp;oTaskSIZE_OF.execute;
			break;
		}
		case ALL_CHARS:{
			taskALL_CHARS oTaskALL_CHARS;
			pfTaskExecute = &amp;oTaskALL_CHARS.execute;
			break;
		}
		case VALUE_RANGES:{
			taskVALUE_RANGES oTaskVALUE_RANGES;
			pfTaskExecute = &amp;oTaskVALUE_RANGES.execute;
			break;
		}
		default:{
			return pfTaskExecute;
			break;
		}
	}
}
</code></pre>
<p>_pfGetInterface sieht so aus:</p>
<pre><code>typedef void (*_pfGetInterface)();
</code></pre>
<p>und taskHELLO_WORLD so:</p>
<pre><code>class taskHELLO_WORLD : task
{
public:
	static void execute();
};
</code></pre>
<p>Vieleicht kann mir auch direkt jemand erklären, warum ich keine Zeiger auf nicht statische Memberfunktionen machen kann?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1525166</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1525166</guid><dc:creator><![CDATA[nils2]]></dc:creator><pubDate>Sun, 08 Jun 2008 14:06:21 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionszeiger on Sun, 08 Jun 2008 14:26:15 GMT]]></title><description><![CDATA[<p>nils2 schrieb:</p>
<blockquote>
<p>Wenn mir jemand erklären könnte, was er mit einem gekennzeichneten Namen meint, wäre ich dankbar.</p>
</blockquote>
<p>Das ist eine schlechte Übersetzung. Der englische Ausdurck dafür ist &quot;qualified id&quot;, ein Bezeichner, der durch die Angabe des Namensraums, in dem er steht, qualifiziert wurde.</p>
<pre><code class="language-cpp">foo::bar
</code></pre>
<p>Kurz: wenn der Scopeoperator :: davor auftaucht, handelt es sich um einen qualifizierten Bezeichner, sonst nicht.</p>
<blockquote>
<p>Vieleicht kann mir auch direkt jemand erklären, warum ich keine Zeiger auf nicht statische Memberfunktionen machen kann?</p>
</blockquote>
<p>Eine nichtstatische Memberfunktion hat einen zusätzlichen Parameter (den Objektparameter), der nicht Teil des Funktionstyps ist. Es ist möglich, einen Zeiger auf eine nichtstatische Memberfunktion zu bilden - dabei handelt es sich aber trotz des Namens um keinen Zeiger. Das Resultat des Adressoperators auf eine entsprechende Id ist dann ein solcher Zeiger, stellt aber keine Adresse dar (die über ein Objekt und einen solchen Zeiger konkret aufgerufene Funktion hängt vom dynamischen Typ des Objektes ab, wenn die bezeichnete Memberfunktion virtuell ist). Da es sich um keinen FUnktionszeiger handelt, ist die Syntax eine andere.</p>
<pre><code class="language-cpp">typedef void (MyClass :: * pmf_t)();
pmf_t pmf = &amp;MyClass::foo;
MyClass x, *p;
(x .* pmf)();
(p -&gt;* pmf)();
</code></pre>
<p>Ein Zeiger-auf-Memberfunktion stellt also eine Art Funktion da, die - über eine spezielle Syntax - ein Objekt als Argument nimmt und eine Funktion zurückgibt (das Einzige, was mit dieser Funktion gemacht werden kann, ist allerdings der direkte Aufruf).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1525181</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1525181</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 08 Jun 2008 14:26:15 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionszeiger on Sun, 08 Jun 2008 14:35:44 GMT]]></title><description><![CDATA[<p>Puhh.<br />
Ok, hab´ aber nur den ersten Teil komplett verstanden, aber eine Ahnung was du meinst. Das heisst, wenn ich die andere Syntax benutzte kann ich mir auch das static sparen? Ich probiers einfach aus. Vielen Dank.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1525189</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1525189</guid><dc:creator><![CDATA[nils2]]></dc:creator><pubDate>Sun, 08 Jun 2008 14:35:44 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionszeiger on Sun, 08 Jun 2008 14:42:20 GMT]]></title><description><![CDATA[<p>nils2 schrieb:</p>
<blockquote>
<p>Puhh.<br />
Ok, hab´ aber nur den ersten Teil komplett verstanden, aber eine Ahnung was du meinst. Das heisst, wenn ich die andere Syntax benutzte kann ich mir auch das static sparen? Ich probiers einfach aus. Vielen Dank.</p>
</blockquote>
<p>Genau, aber du brauchst im Gegensatz zu herkömmlichen Funktionszeiger noch ein Objekt, auf welches du dann den Funktionszeiger anwenden kannst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1525200</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1525200</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 08 Jun 2008 14:42:20 GMT</pubDate></item><item><title><![CDATA[Reply to Funktionszeiger on Sun, 08 Jun 2008 14:48:32 GMT]]></title><description><![CDATA[<p>Ja, so hatte ich es ursprünglich vor, doch der Compiler wollte es mir verbieten. Jetzt klappt es so wie ich es wollte. Schön, danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1525203</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1525203</guid><dc:creator><![CDATA[nils2]]></dc:creator><pubDate>Sun, 08 Jun 2008 14:48:32 GMT</pubDate></item></channel></rss>