<?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[Class Member als Funktionszeiger übergeben]]></title><description><![CDATA[<p>Hallo,<br />
ich programmiere gerade Wrapper-Klassen für die SDL. Nun steht ich beim programmieren der Timer Klasse vor einem Problem. Ich stelle die Frage im allgemein C++-Forum, da diese Frage nicht SDL-spezifisch ist.<br />
Aber nun zum Problem: Mein Vorhaben sieht so aus, das ich eine abstrakte Klasse definiere, die die Funktion CallbackFunction() beinhaltet. Diese Funktion soll bei jeder Ableitung neu geschrieben werden. Um nun den Timer zu aktivieren, ruft die Funktion Add() die SDL-Funktion SDL_AddTimer() auf. Diese Funktion benötigt einen Funktionszeiger (Definition siehe <a href="http://www.libsdl.org/cgi/docwiki.cgi/SDL_AddTimer" rel="nofollow">http://www.libsdl.org/cgi/docwiki.cgi/SDL_AddTimer</a>) Wie schaffe ich das? Bei meine bisherigen Versuche habe ich immer nur Compilerfehler bekommen.</p>
<p>Klasse:</p>
<pre><code class="language-cpp">class Timer {
protected:
	virtual Uint32 CallbackFunction( Uint32 interval, void* param ) = 0;
public:
	bool Add( Uint32 interval );
};
</code></pre>
<p>Funktion:</p>
<pre><code class="language-cpp">bool Timer::Add( Uint32 interval ) {
	if( !IsAdded() ) {
		m_ID = SDL_AddTimer( interval, Timer::CallbackFunction, NULL );
	}
	return IsAdded();
}
</code></pre>
<p>Compiler-Fehler g++:</p>
<blockquote>
<p>error: argument of type ‘Uint32 (SDL::Timer::)(Uint32, void*)’ does not match ‘Uint32 (<em>)(Uint32, void</em>)’</p>
</blockquote>
<p>Hätte jemand einen Vorschlag?</p>
<p>Vielen Dank im Voraus,<br />
TiBo</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/269187/class-member-als-funktionszeiger-übergeben</link><generator>RSS for Node</generator><lastBuildDate>Mon, 31 Aug 2026 11:05:30 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/269187.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 20 Jun 2010 15:34:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Class Member als Funktionszeiger übergeben on Sun, 20 Jun 2010 15:34:09 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich programmiere gerade Wrapper-Klassen für die SDL. Nun steht ich beim programmieren der Timer Klasse vor einem Problem. Ich stelle die Frage im allgemein C++-Forum, da diese Frage nicht SDL-spezifisch ist.<br />
Aber nun zum Problem: Mein Vorhaben sieht so aus, das ich eine abstrakte Klasse definiere, die die Funktion CallbackFunction() beinhaltet. Diese Funktion soll bei jeder Ableitung neu geschrieben werden. Um nun den Timer zu aktivieren, ruft die Funktion Add() die SDL-Funktion SDL_AddTimer() auf. Diese Funktion benötigt einen Funktionszeiger (Definition siehe <a href="http://www.libsdl.org/cgi/docwiki.cgi/SDL_AddTimer" rel="nofollow">http://www.libsdl.org/cgi/docwiki.cgi/SDL_AddTimer</a>) Wie schaffe ich das? Bei meine bisherigen Versuche habe ich immer nur Compilerfehler bekommen.</p>
<p>Klasse:</p>
<pre><code class="language-cpp">class Timer {
protected:
	virtual Uint32 CallbackFunction( Uint32 interval, void* param ) = 0;
public:
	bool Add( Uint32 interval );
};
</code></pre>
<p>Funktion:</p>
<pre><code class="language-cpp">bool Timer::Add( Uint32 interval ) {
	if( !IsAdded() ) {
		m_ID = SDL_AddTimer( interval, Timer::CallbackFunction, NULL );
	}
	return IsAdded();
}
</code></pre>
<p>Compiler-Fehler g++:</p>
<blockquote>
<p>error: argument of type ‘Uint32 (SDL::Timer::)(Uint32, void*)’ does not match ‘Uint32 (<em>)(Uint32, void</em>)’</p>
</blockquote>
<p>Hätte jemand einen Vorschlag?</p>
<p>Vielen Dank im Voraus,<br />
TiBo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1915155</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1915155</guid><dc:creator><![CDATA[TiBo]]></dc:creator><pubDate>Sun, 20 Jun 2010 15:34:09 GMT</pubDate></item><item><title><![CDATA[Reply to Class Member als Funktionszeiger übergeben on Sun, 20 Jun 2010 15:40:19 GMT]]></title><description><![CDATA[<p>Der C-Callback kennt keine Memberfunktionszeiger, sondern nur Funktionszeiger auf globale Funktionen. Du musst daher eine freie Zwischenfunktion einrichten. Ist mühsam, aber das Problem hat man eben mit C-Bibliotheken.</p>
<p>Übrigens gibt es schon einen Wrapper für SDL, nämlich <a href="http://sdlmm.sourceforge.net/" rel="nofollow">SDLmm</a>. Allerdings würde ich dir raten, wenn schon <a href="http://www.sfml-dev.org" rel="nofollow">SFML</a> zu verwenden (eine schöne C++-Bibliothek). Die hat auch eine saubere Timer-Klasse. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1915163</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1915163</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 20 Jun 2010 15:40:19 GMT</pubDate></item><item><title><![CDATA[Reply to Class Member als Funktionszeiger übergeben on Sun, 20 Jun 2010 15:59:51 GMT]]></title><description><![CDATA[<p>SDLmm habe ich schon gefunden, allerdings fand ich in gewissen Bereichen nur Init und Quit Funktionen (Weswegen ich auch selber angefangen hab einen Wrapper zu schreiben).<br />
Weißt du ob SFML auf den selben Plattformen wie SDL verfügbar ist und die selben Funktionalitäten zur Verfügung stellt? (Ich weiß, ist off-topic ;))</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1915181</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1915181</guid><dc:creator><![CDATA[TiBo]]></dc:creator><pubDate>Sun, 20 Jun 2010 15:59:51 GMT</pubDate></item><item><title><![CDATA[Reply to Class Member als Funktionszeiger übergeben on Sun, 20 Jun 2010 16:11:54 GMT]]></title><description><![CDATA[<p>TiBo schrieb:</p>
<blockquote>
<p>Weißt du ob SFML auf den selben Plattformen wie SDL verfügbar ist und die selben Funktionalitäten zur Verfügung stellt?</p>
</blockquote>
<p>Funktionalität sollte mehr oder weniger die gleiche sein. Allerings fand ich bei SFML praktisch, dass man nicht für jede Kleinigkeit (z.B. JPEG-Bilder, TTF-Schriftarten, Sound, Zoom und Rotation) ein eigenes Modul herunterladen muss. Auch das API finde ich viel sauberer (allein schon da es in C++ geschrieben ist). Und bezüglich Performance schneidet SFML ebenfalls besser ab. Ich habe früher auch SDL verwendet, allerdings bin ich vor etwa zwei Jahren umgestiegen.</p>
<p>Plattformen werden von SFML weniger unterstützt, die verbreitetsten für Desktopanwendungen und Spiele (Windows, Mac und Linux) sind jedoch dabei.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1915197</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1915197</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 20 Jun 2010 16:11:54 GMT</pubDate></item></channel></rss>