<?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[[SOLVED]SDL_Thread mit Memberfunktionen]]></title><description><![CDATA[<p>Morgen,</p>
<p>ich würde SDL_Thread gern innerhalb einer Klasse mit Memberfunktionen verwenden. Leider scheitert dies an der Typumwandlung.</p>
<p>Beispiel:</p>
<pre><code class="language-cpp">#include &quot;SDL/SDL_thread.h&quot;

class Threaded
{
    int member_func() { return 0; }
    SDL_Thread* thread = nullptr;

    public:
        void operator()()
        {
            thread = SDL_CreateThread(member_func,nullptr);
        }
} example;

int main()
{
    example();

    return 0;
}
</code></pre>
<p>Der Compiler gibt mir dabei folgende Fehlermeldung aus:</p>
<pre><code>main.cpp: In Elementfunktion »void Threaded::operator()()«:
main.cpp:12:58: Fehler: »Threaded::member_func« kann nicht vom Typ »int (Threaded::)()« in den Typ »int (*)(void*)« umgewandelt werden
</code></pre>
<p>Welche Möglichkeiten gibt es, diesen Fehler zu umgehen?</p>
<p>Mit freundlichen Grüßen,<br />
Ki</p>
<p>EDIT:<br />
Ich habe mittlerweile erfahren, dass nur statische Member Funktionen in dieser Form gecastet werden können. Die Lösung ist also Folgende:</p>
<pre><code class="language-cpp">#include &quot;SDL/SDL_thread.h&quot;

class Threaded
{
    int member_func() { return 0; }
    static int static_member_func(Threaded* t) { return t-&gt;member_func(); }
    SDL_Thread* thread = nullptr;

    public:
        void operator()()
        {
            thread = SDL_CreateThread((int(*)(void*))static_member_func,this);
        }
} example;

int main()
{
    example();

    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/306028/solved-sdl_thread-mit-memberfunktionen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 08 Aug 2026 12:25:06 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/306028.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 15 Jul 2012 23:12:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [SOLVED]SDL_Thread mit Memberfunktionen on Sun, 15 Jul 2012 23:39:09 GMT]]></title><description><![CDATA[<p>Morgen,</p>
<p>ich würde SDL_Thread gern innerhalb einer Klasse mit Memberfunktionen verwenden. Leider scheitert dies an der Typumwandlung.</p>
<p>Beispiel:</p>
<pre><code class="language-cpp">#include &quot;SDL/SDL_thread.h&quot;

class Threaded
{
    int member_func() { return 0; }
    SDL_Thread* thread = nullptr;

    public:
        void operator()()
        {
            thread = SDL_CreateThread(member_func,nullptr);
        }
} example;

int main()
{
    example();

    return 0;
}
</code></pre>
<p>Der Compiler gibt mir dabei folgende Fehlermeldung aus:</p>
<pre><code>main.cpp: In Elementfunktion »void Threaded::operator()()«:
main.cpp:12:58: Fehler: »Threaded::member_func« kann nicht vom Typ »int (Threaded::)()« in den Typ »int (*)(void*)« umgewandelt werden
</code></pre>
<p>Welche Möglichkeiten gibt es, diesen Fehler zu umgehen?</p>
<p>Mit freundlichen Grüßen,<br />
Ki</p>
<p>EDIT:<br />
Ich habe mittlerweile erfahren, dass nur statische Member Funktionen in dieser Form gecastet werden können. Die Lösung ist also Folgende:</p>
<pre><code class="language-cpp">#include &quot;SDL/SDL_thread.h&quot;

class Threaded
{
    int member_func() { return 0; }
    static int static_member_func(Threaded* t) { return t-&gt;member_func(); }
    SDL_Thread* thread = nullptr;

    public:
        void operator()()
        {
            thread = SDL_CreateThread((int(*)(void*))static_member_func,this);
        }
} example;

int main()
{
    example();

    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2233063</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2233063</guid><dc:creator><![CDATA[Ki]]></dc:creator><pubDate>Sun, 15 Jul 2012 23:39:09 GMT</pubDate></item><item><title><![CDATA[Reply to [SOLVED]SDL_Thread mit Memberfunktionen on Mon, 16 Jul 2012 01:06:57 GMT]]></title><description><![CDATA[<p>Deine Lösung mag zwar funktionieren, ist aber falsch und erzeugt undefiniertes Verhalten. (Lies: Es kann schiefgehen, muss aber nicht.)</p>
<p>Richtig wäre, wenn die Funktion einen void* nimmt und diesen in ein Threaded* castet:</p>
<pre><code class="language-cpp">static int static_member_func(void* t) { return static_cast&lt;Threaded*&gt;(t)-&gt;member_func(); }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2233066</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2233066</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Mon, 16 Jul 2012 01:06:57 GMT</pubDate></item><item><title><![CDATA[Reply to [SOLVED]SDL_Thread mit Memberfunktionen on Mon, 16 Jul 2012 13:53:51 GMT]]></title><description><![CDATA[<p>Danke, wird geändert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2233202</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2233202</guid><dc:creator><![CDATA[Ki]]></dc:creator><pubDate>Mon, 16 Jul 2012 13:53:51 GMT</pubDate></item></channel></rss>