<?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[this an funktion übergeben]]></title><description><![CDATA[<p>Hi!</p>
<p>Ich hab vor ein paar Wochen mit C++ angefangen (habe vorher aber schon mit diversen anderen Programmiersprachen gearbeitet).<br />
Ich habe zur zeit ein kleines Problem mit dem this zeiger einer Klasse.</p>
<p>Wie kann ich this, an eine funktion übergeben?</p>
<pre><code class="language-cpp">class foobar
{
    public:
        foobar() {};
        void rufMich() { machWasMitFoobar::machWas( this ); } // wie?
        void gibWasAus( int i ) { ... }
};

class machWasMitFoobar
{
    public:
        static void machWas( foobar* fb ) // wie?
        {
            fb-&gt;gibWasAus( 1 );
        }
};
</code></pre>
<p>Ich weiss, das Programm wird so nciht laufen, aber das sein mal dahin gestellt <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 />
Wie müssen die zeilen für den aufruf und die deklaration der Funktion machWas sein, damit ich this übergeben kann?</p>
<p>Komme noch sehr mit den Zeigern usw durch einander, das ist neuland für mich. Hab auch nix passendes zu meinem Probelm im Inet gefunden.<br />
Vielleicht kann ja einer von euch helfen.</p>
<p>Thx, Ari</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/245923/this-an-funktion-übergeben</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 21:26:00 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/245923.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 21 Jul 2009 00:05:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to this an funktion übergeben on Tue, 21 Jul 2009 00:05:38 GMT]]></title><description><![CDATA[<p>Hi!</p>
<p>Ich hab vor ein paar Wochen mit C++ angefangen (habe vorher aber schon mit diversen anderen Programmiersprachen gearbeitet).<br />
Ich habe zur zeit ein kleines Problem mit dem this zeiger einer Klasse.</p>
<p>Wie kann ich this, an eine funktion übergeben?</p>
<pre><code class="language-cpp">class foobar
{
    public:
        foobar() {};
        void rufMich() { machWasMitFoobar::machWas( this ); } // wie?
        void gibWasAus( int i ) { ... }
};

class machWasMitFoobar
{
    public:
        static void machWas( foobar* fb ) // wie?
        {
            fb-&gt;gibWasAus( 1 );
        }
};
</code></pre>
<p>Ich weiss, das Programm wird so nciht laufen, aber das sein mal dahin gestellt <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 />
Wie müssen die zeilen für den aufruf und die deklaration der Funktion machWas sein, damit ich this übergeben kann?</p>
<p>Komme noch sehr mit den Zeigern usw durch einander, das ist neuland für mich. Hab auch nix passendes zu meinem Probelm im Inet gefunden.<br />
Vielleicht kann ja einer von euch helfen.</p>
<p>Thx, Ari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1746612</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1746612</guid><dc:creator><![CDATA[Ariakas]]></dc:creator><pubDate>Tue, 21 Jul 2009 00:05:38 GMT</pubDate></item><item><title><![CDATA[Reply to this an funktion übergeben on Tue, 21 Jul 2009 00:35:57 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">//foobar
#include &quot;machwasmitfoobar.h&quot;

class foobar
{
    public:
        foobar() {};
        void rufMich() { machWasMitFoobar::machWas( this ); } // wie?
        void gibWasAus( int i ) { ... }
};
</code></pre>
<p>natürlich auch noch in cpp/h trennen, dann musst du hier im header nix mehr includen..</p>
<pre><code class="language-cpp">//machwasmitfoobar.h
class machWasMitFoobar
{
    public:
        static void machWas( class foobar* fb );
};
</code></pre>
<pre><code class="language-cpp">//machwasmitfoobar.cpp
#include &quot;machwasmitfoobar.h&quot;
#include &quot;foobar.h&quot;

void machWasMitFoobar::machWas(foobar *these)
{
  these-&gt;foo();
}
</code></pre>
<p>oder wo lag das problem?</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1746617</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1746617</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Tue, 21 Jul 2009 00:35:57 GMT</pubDate></item><item><title><![CDATA[Reply to this an funktion übergeben on Tue, 21 Jul 2009 06:27:02 GMT]]></title><description><![CDATA[<p>include guards bzw. #pragma once wären vermutlich auch nicht schlecht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1746645</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1746645</guid><dc:creator><![CDATA[hmmmmmm]]></dc:creator><pubDate>Tue, 21 Jul 2009 06:27:02 GMT</pubDate></item><item><title><![CDATA[Reply to this an funktion übergeben on Tue, 21 Jul 2009 07:43:29 GMT]]></title><description><![CDATA[<p>Soweit ich das verstanden habe, willst du ein Objekt der Klasse foobar an eine statische Funktion einer anderen Klassen übergeben. Hier mein Tipp:</p>
<pre><code class="language-cpp">class foobar(); // Vorwärtsdeklaration, damit du einen Zeiger auf foobar erstllen kannst

class machWasMitFoobar 
{
    public:
        static void machWas(foobar *fb){fb-&gt;gibWasAus(1);} // Besitzt zwar keinen eigenen this-Zeiger, kann dafür aber immer noch Klassenobjekte übernehmen.
};

class foobar // Besitzt eine Funktion, die eine statische Funktion einer andern Klasse aufruft
{
    public:
        foobar(){}
        void rufMich(){machWasMitFoobar::machWas(this);} // this==Adresse, wird in machWasMitFoobar::machWas() automatisch in einen Zeiger verwandelt.
        void gibWasAus(int i){(...)}
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1746687</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1746687</guid><dc:creator><![CDATA[Der aus dem Westen...]]></dc:creator><pubDate>Tue, 21 Jul 2009 07:43:29 GMT</pubDate></item><item><title><![CDATA[Reply to this an funktion übergeben on Tue, 21 Jul 2009 07:48:29 GMT]]></title><description><![CDATA[<p>Kurze Anmerkung: die Klammern nach dem Klassennamen foobar in der allerersten Zeile ignorieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1746694</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1746694</guid><dc:creator><![CDATA[Der aus dem Westen ...]]></dc:creator><pubDate>Tue, 21 Jul 2009 07:48:29 GMT</pubDate></item><item><title><![CDATA[Reply to this an funktion übergeben on Tue, 21 Jul 2009 12:18:38 GMT]]></title><description><![CDATA[<p>forward deklaration wird dort kaum reichen...<br />
aber ok - wieso auch mal meinen vorschlag lesen, der gehen sollte - lieber selbst noch mal was posten, in dem man ein viertel der lösung kopiert und hofft, dass es auch reicht ~~</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1746916</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1746916</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Tue, 21 Jul 2009 12:18:38 GMT</pubDate></item><item><title><![CDATA[Reply to this an funktion übergeben on Thu, 23 Jul 2009 07:45:53 GMT]]></title><description><![CDATA[<p>Wieso sollte eine Vorwärtsdeklaration nicht reichen? Der Compiler weiss zu dem Zeitpunkt zwar noch nicht (wenn der die Klasse &quot;machWasMitFoobar&quot; definiert), wie viel Speicher foobar braucht (weshalb man noch kein foobar-OBJEKT erstellen kann), aber ein ZEIGER braucht nur vier Bytes, um auf ein späteres foobar-Objekt zu zeigen, daher geht dies. Sonst wären verkettete Listen ja auch nicht möglich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1748018</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1748018</guid><dc:creator><![CDATA[Der aus dem Westen ...]]></dc:creator><pubDate>Thu, 23 Jul 2009 07:45:53 GMT</pubDate></item><item><title><![CDATA[Reply to this an funktion übergeben on Thu, 23 Jul 2009 07:56:12 GMT]]></title><description><![CDATA[<p>Mir fällt gerade auf, dass dein (unskilled) Lösungsvorschlag lautet, eine Klasse in eine Headerdatei zu verpacken. Denk mal nach:</p>
<pre><code class="language-cpp">class foobar
{
public:
        foobar(){};
        void rufMich(){(...)} // Diese Funktion muss wissen, was ein &quot;machWasMitFoobar&quot; ist ...
};

class machWasMitFoobar
{
public:
    static void machWas(foobar *fb){(...)} // und diese Funktion muss wissen, was ein &quot;foobar&quot; ist.
};
</code></pre>
<p>Egal, wie man die Definitionen der Klassen stellt, die beiden Objekte müssen voneinander wissen, sonst kommt bei rufMich() der Fehler &quot;machWasMitFoobar::machWas()&quot; : Nichtdeklarierter Bezeicher&quot; oder &quot;Links von '::' muss sich eine Klasse/Struktur/Namensbereich befinden&quot;. Wenn man die Definitionen vertauscht, gilt das selbe für foobar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1748021</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1748021</guid><dc:creator><![CDATA[Der aus dem Westen ...]]></dc:creator><pubDate>Thu, 23 Jul 2009 07:56:12 GMT</pubDate></item><item><title><![CDATA[Reply to this an funktion übergeben on Thu, 23 Jul 2009 08:18:32 GMT]]></title><description><![CDATA[<p>Ariakas schrieb:</p>
<blockquote>
<p>Ich hab vor ein paar Wochen mit C++ angefangen (habe vorher aber schon mit diversen anderen Programmiersprachen gearbeitet).</p>
</blockquote>
<p>Welche zum Beispiel?</p>
<p>Ariakas schrieb:</p>
<blockquote>
<p>Ich habe zur zeit ein kleines Problem mit dem this zeiger einer Klasse.<br />
Wie kann ich this, an eine funktion übergeben?</p>
<pre><code class="language-cpp">class foobar
{
    public:
        foobar() {};
        void rufMich() { machWasMitFoobar::machWas( this ); } // wie?
        void gibWasAus( int i ) { ... }
};
</code></pre>
</blockquote>
<p>Das ist kein Problem mit dem this-Zeiger. Dein Problem ist eine fehlende Vorwärtsdeklaration von &quot;machWasMitFoobar::machWas(foobar*)&quot;.</p>
<p>Wenn es unbedingt eine inline-definition für rufmich sein muss:</p>
<pre><code class="language-cpp">class foobar; // Vorwärtsdeklaration

void machwas(foobar*); // Vorwärtsdeklaration

class foobar
{
public:
  void rufmich() {machwas(this);}
  void ausgabe(int i) {/*...*/}
};

void machwas(foobar* zeiger)
{
  zeiger-&gt;ausgabe(42);
}
</code></pre>
<p>Beachte: Dies sind <a href="http://de.wikipedia.org/wiki/Inline-Ersetzung" rel="nofollow">Inline</a>-Definitionen für die Elementfunktionen foobar::rufmich und foobar::ausgabe. Damit bittest Du den Compiler diese Funktionen zu &quot;inlinen&quot;.</p>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1748033</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1748033</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Thu, 23 Jul 2009 08:18:32 GMT</pubDate></item><item><title><![CDATA[Reply to this an funktion übergeben on Sat, 01 Aug 2009 10:31:53 GMT]]></title><description><![CDATA[<p>Hi!</p>
<p>Danke für die rege hilfe stellung. Sorry das ich mich so lange nicht gemeldet habe, war im Urlaub <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>
<p>Werde das ganze nachher nochmal probieren.</p>
<p>Vorherige Programmiersprachen: C#, Delphi, Basic, CAL</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1753426</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1753426</guid><dc:creator><![CDATA[Ariakas]]></dc:creator><pubDate>Sat, 01 Aug 2009 10:31:53 GMT</pubDate></item><item><title><![CDATA[Reply to this an funktion übergeben on Sun, 02 Aug 2009 01:27:54 GMT]]></title><description><![CDATA[<p>Hat alles super funktioniert!<br />
Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1753844</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1753844</guid><dc:creator><![CDATA[Ariakas]]></dc:creator><pubDate>Sun, 02 Aug 2009 01:27:54 GMT</pubDate></item></channel></rss>