<?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[Zeiger auf eine Funktion in einer Klasse]]></title><description><![CDATA[<p>Ich muss, um einen Thread zu erstellen, einen Zeiger auf die Funktion übergeben vom Typ void*(void*). Hier mein Beispiel Code:</p>
<pre><code class="language-cpp">void Funktion1(void *dummy);
class Beispiel
{
 public:
  void Funktion2(void *dummy);
  Beispiel()
  {
   _beginthread(Funktion1,0,NULL);
   _beginthread(Funktion2,0,NULL);
  }
};
</code></pre>
<p>Der Aufruf für Funktion1 funktioniert, nur der von Funktion2, die in einer Klasse liegt, klappt nicht:</p>
<pre><code class="language-cpp">12 C:\Dev-Cpp\main8.cpp argument of type `void (Beispiel::)(void*)' does not match `void (*)(void*)'
</code></pre>
<p>Wie lässt sich das beheben, ich hab echt keine Ahnung?</p>
<p>mfg.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/124649/zeiger-auf-eine-funktion-in-einer-klasse</link><generator>RSS for Node</generator><lastBuildDate>Thu, 09 Jul 2026 14:30:25 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/124649.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 29 Oct 2005 19:37:20 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zeiger auf eine Funktion in einer Klasse on Sat, 29 Oct 2005 19:37:20 GMT]]></title><description><![CDATA[<p>Ich muss, um einen Thread zu erstellen, einen Zeiger auf die Funktion übergeben vom Typ void*(void*). Hier mein Beispiel Code:</p>
<pre><code class="language-cpp">void Funktion1(void *dummy);
class Beispiel
{
 public:
  void Funktion2(void *dummy);
  Beispiel()
  {
   _beginthread(Funktion1,0,NULL);
   _beginthread(Funktion2,0,NULL);
  }
};
</code></pre>
<p>Der Aufruf für Funktion1 funktioniert, nur der von Funktion2, die in einer Klasse liegt, klappt nicht:</p>
<pre><code class="language-cpp">12 C:\Dev-Cpp\main8.cpp argument of type `void (Beispiel::)(void*)' does not match `void (*)(void*)'
</code></pre>
<p>Wie lässt sich das beheben, ich hab echt keine Ahnung?</p>
<p>mfg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/903574</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/903574</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Sat, 29 Oct 2005 19:37:20 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf eine Funktion in einer Klasse on Sat, 29 Oct 2005 19:38:44 GMT]]></title><description><![CDATA[<p>funktion2 static machen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/903576</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/903576</guid><dc:creator><![CDATA[miller_m]]></dc:creator><pubDate>Sat, 29 Oct 2005 19:38:44 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf eine Funktion in einer Klasse on Sat, 29 Oct 2005 19:43:27 GMT]]></title><description><![CDATA[<p>miller_m schrieb:</p>
<blockquote>
<p>funktion2 static machen</p>
</blockquote>
<p>So einfach? Ist ja cool. Danke!</p>
<p>mfg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/903580</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/903580</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Sat, 29 Oct 2005 19:43:27 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf eine Funktion in einer Klasse on Sat, 29 Oct 2005 19:46:47 GMT]]></title><description><![CDATA[<p>das hat aber auch nachteile. du musst z.b. der funktion einen pointer auf das jeweilige objekt mitgeben, damit sie darauf zugreifen kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/903581</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/903581</guid><dc:creator><![CDATA[net 0]]></dc:creator><pubDate>Sat, 29 Oct 2005 19:46:47 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf eine Funktion in einer Klasse on Sat, 29 Oct 2005 20:23:21 GMT]]></title><description><![CDATA[<p>net schrieb:</p>
<blockquote>
<p>das hat aber auch nachteile. du musst z.b. der funktion einen pointer auf das jeweilige objekt mitgeben, damit sie darauf zugreifen kann.</p>
</blockquote>
<p>...oder ich mache diese wieder static.</p>
<pre><code class="language-cpp">void Funktion1(void *dummy);
class Beispiel
{
 private:
  static int Test;
 public:
  static void Funktion2(void *dummy)
  {
   Test++;
  }
  void Funktion3()
  {
   Test++;
  }
  Beispiel()
  {
   Test++;
   _beginthread(Funktion1,0,NULL);
   _beginthread(Funktion2,0,NULL);
   Funktion3();
  }
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/903596</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/903596</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Sat, 29 Oct 2005 20:23:21 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf eine Funktion in einer Klasse on Sat, 29 Oct 2005 21:01:13 GMT]]></title><description><![CDATA[<p>joomoo schrieb:</p>
<blockquote>
<p>...oder ich mache diese wieder static.</p>
</blockquote>
<p>die haste dann aber auch nur 1 mal. sobald du mehrere instanzen des objekts brauchst geht das nicht mehr.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/903608</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/903608</guid><dc:creator><![CDATA[net 0]]></dc:creator><pubDate>Sat, 29 Oct 2005 21:01:13 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf eine Funktion in einer Klasse on Sun, 30 Oct 2005 10:44:09 GMT]]></title><description><![CDATA[<p>net schrieb:</p>
<blockquote>
<p>joomoo schrieb:</p>
<blockquote>
<p>...oder ich mache diese wieder static.</p>
</blockquote>
<p>die haste dann aber auch nur 1 mal. sobald du mehrere instanzen des objekts brauchst geht das nicht mehr.</p>
</blockquote>
<p>Stimmt das ist nicht gut. Okay, ich habe es jetzt mal umgeschrieben, so das ein Zeiger auf die Objekte mit übergeben wird:</p>
<pre><code class="language-cpp">class Beispiel
{
 private:
  int Test;
 public:
  static void Funktion2(void *was)
  {
   int *pTest = (int*)was;
   *pTest++;
   char text[50];
   sprintf(text,&quot;%i&quot;,*pTest);
   MessageBox(0,text,text,0);
  }
  Beispiel()
  {
   Test = 50;
   Test++;
   _beginthread(Funktion2,0,(void *)&amp;Test);
  }
};
</code></pre>
<p>Allerdings steht in der MessageBox 48 und nicht 52. Wenn ich die Zeile<br />
*pTest++;<br />
durch<br />
*pTest += 1;<br />
ersetze, dann geht's. Warum das denn?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/903741</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/903741</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Sun, 30 Oct 2005 10:44:09 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf eine Funktion in einer Klasse on Sun, 30 Oct 2005 12:13:57 GMT]]></title><description><![CDATA[<p>*pTest++ ist identisch mit den Zeilen:</p>
<pre><code class="language-cpp">*pTest; // macht nix, wird also ignoriert (und ggf. eine Warnung ausgegeben je nach Compiler und Einstellung)
pTest = pTest + 1; // der Zeiger wird um 1 erhöht und zeigt dann auf das nächste int
</code></pre>
<p>Das nächste int ist wohl zufällig bei Dir eine 48.</p>
<p>*pTest += 1 ist identisch mit</p>
<pre><code class="language-cpp">*pTest = *pTest + 1; // hier wird der Inhalt worauf pTest zeigt um 1 erhöht
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/903821</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/903821</guid><dc:creator><![CDATA[niemand]]></dc:creator><pubDate>Sun, 30 Oct 2005 12:13:57 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf eine Funktion in einer Klasse on Sun, 30 Oct 2005 12:26:20 GMT]]></title><description><![CDATA[<p>joomoo schrieb:</p>
<blockquote>
<p>Allerdings steht in der MessageBox 48 und nicht 52. Wenn ich die Zeile<br />
*pTest++;<br />
durch<br />
*pTest += 1;<br />
ersetze, dann geht's. Warum das denn?</p>
</blockquote>
<p>&quot;Operator Precedence&quot;. ++ (Post-Inkrement) hat Vorrang gegenüber * (Indirektion). Demzufolge macht '*pTest++;' das gleiche wie 'pTest++;'. Dh, du setzt pTest auf einen Speicherbereich, der dir gar nicht gehört. Das Dereferenzieren bringt überhaupt nichts mehr. Du willst wohl eher sowas wie '(*pTest)++'.</p>
<p>edit:<br />
Zu spät, sollte doch eher mal die Anzeige aktualisieren. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/903824</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/903824</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Sun, 30 Oct 2005 12:26:20 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf eine Funktion in einer Klasse on Sun, 30 Oct 2005 16:29:44 GMT]]></title><description><![CDATA[<p>Danke. Das hat es also mit dem ++ auf sich.</p>
<p>Ich hab jetzt mal das ganze für mehrere Variablen mit einer Struktur geschrieben:</p>
<pre><code class="language-cpp">struct Daten
{
 int Test1;
 char Test2[50];
};
class Beispiel
{
 private:
  Daten Test;
 public:
  static void Funktion2(void *was)
  {
   Daten *pTest = (Daten*)was;
   pTest-&gt;Test1 += 5;
   sprintf(pTest-&gt;Test2,&quot;%i&quot;,pTest-&gt;Test1);
   MessageBox(0,pTest-&gt;Test2,&quot;Funktion2&quot;,0);
  }
  Beispiel()
  {
   Test.Test1 = 50;
   Test.Test1++;
   _beginthread(Funktion2,0,(void *)&amp;Test);
   Sleep(2000);
   MessageBox(0,Test.Test2,&quot;Beispiel&quot;,0);
  }
};
</code></pre>
<p>Gibt es noch Sachen daran auszusetzen, oder welche die ich verbessern sollte?</p>
<p>mfg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/903946</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/903946</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Sun, 30 Oct 2005 16:29:44 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf eine Funktion in einer Klasse on Tue, 01 Nov 2005 20:58:13 GMT]]></title><description><![CDATA[<p>joomoo schrieb:</p>
<blockquote>
<p>Danke. Das hat es also mit dem ++ auf sich.</p>
<p>Ich hab jetzt mal das ganze für mehrere Variablen mit einer Struktur geschrieben:</p>
<pre><code class="language-cpp">struct Daten
{
 int Test1;
 char Test2[50];
};
class Beispiel
{
 private:
  Daten Test;
 public:
  static void Funktion2(void *was)
  {
   Daten *pTest = (Daten*)was;
   pTest-&gt;Test1 += 5;
   sprintf(pTest-&gt;Test2,&quot;%i&quot;,pTest-&gt;Test1);
   MessageBox(0,pTest-&gt;Test2,&quot;Funktion2&quot;,0);
  }
  Beispiel()
  {
   Test.Test1 = 50;
   Test.Test1++;
   _beginthread(Funktion2,0,(void *)&amp;Test);
   Sleep(2000);
   MessageBox(0,Test.Test2,&quot;Beispiel&quot;,0);
  }
};
</code></pre>
<p>Gibt es noch Sachen daran auszusetzen, oder welche die ich verbessern sollte?</p>
<p>mfg.</p>
</blockquote>
<p>Ich dazu mal eine Frage: Wenn ich in Funktion 2 jetzt eine Variable erstelle, die nicht static ist, ist diese dann in den ganzen Threads von den verschiedenen Instanzen auch gleich?</p>
<p>Weil wenn nicht, dann gäbe es ja eigentlich keinen Unterschied ob ich eine Funktion static mache oder nicht, oder?</p>
<p>mfg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/905993</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/905993</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Tue, 01 Nov 2005 20:58:13 GMT</pubDate></item></channel></rss>