<?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[Basisklasse übergeben?]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich möchte eine Basisklasse als referenz übergeben aber der compiler schreit mit Base wurde nicht deklariert:</p>
<pre><code class="language-cpp">Base * base;
Derived1 derived1;
Derived2 derived2;
MyClass myclass;

if (bedingung) base = &amp;derived1;
else base = derived2;

myclass.foo(base);
</code></pre>
<p>und dann foo</p>
<pre><code class="language-cpp">MyClass::foo(Base&amp; base)
{
       base.bar();
}
</code></pre>
<p>wo liegt mein fehler - oder geht das nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/256464/basisklasse-übergeben</link><generator>RSS for Node</generator><lastBuildDate>Thu, 10 Sep 2026 20:25:28 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/256464.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 13 Dec 2009 11:13:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Basisklasse übergeben? on Sun, 13 Dec 2009 11:13:13 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich möchte eine Basisklasse als referenz übergeben aber der compiler schreit mit Base wurde nicht deklariert:</p>
<pre><code class="language-cpp">Base * base;
Derived1 derived1;
Derived2 derived2;
MyClass myclass;

if (bedingung) base = &amp;derived1;
else base = derived2;

myclass.foo(base);
</code></pre>
<p>und dann foo</p>
<pre><code class="language-cpp">MyClass::foo(Base&amp; base)
{
       base.bar();
}
</code></pre>
<p>wo liegt mein fehler - oder geht das nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1821894</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821894</guid><dc:creator><![CDATA[gafabi]]></dc:creator><pubDate>Sun, 13 Dec 2009 11:13:13 GMT</pubDate></item><item><title><![CDATA[Reply to Basisklasse übergeben? on Sun, 13 Dec 2009 11:31:31 GMT]]></title><description><![CDATA[<p>gafabi schrieb:</p>
<blockquote>
<p>ich möchte eine Basisklasse als referenz übergeben aber der compiler schreit mit Base wurde nicht deklariert:</p>
</blockquote>
<p>Dem Compiler würde ich an dieser Stelle einfach glauben. Der kennt die Sprache, zumindest die syntaktischen Regeln, wahrscheinlich besser als Du.</p>
<p>Dein Programm<em>fetzen</em> sieht gut aus. Es müsste möglich sein, wenn das &quot;drumherum&quot; auch stimmt. Das &quot;drumherum&quot; hast Du uns aber nicht gezeigt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1821902</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821902</guid><dc:creator><![CDATA[senfer]]></dc:creator><pubDate>Sun, 13 Dec 2009 11:31:31 GMT</pubDate></item><item><title><![CDATA[Reply to Basisklasse übergeben? on Sun, 13 Dec 2009 11:47:10 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">myclass.foo(*base);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1821906</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821906</guid><dc:creator><![CDATA[wx++]]></dc:creator><pubDate>Sun, 13 Dec 2009 11:47:10 GMT</pubDate></item><item><title><![CDATA[Reply to Basisklasse übergeben? on Sun, 13 Dec 2009 11:59:50 GMT]]></title><description><![CDATA[<p>Ich habe mich verkuckt. Ich will eigentlich was anderes:<br />
Zuerst ein Minimalbeispiel was geht:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

class Mtx
{
        public:
         void To_Pattern() {
          std::cout &lt;&lt; &quot;ToPattern&quot; &lt;&lt; std::endl;       
         };             
};

// die main
class Base
{
        public:
               virtual void bar() = 0;       
};
class D1 : public Base
{
        public:
                void bar() {
                std::cout &lt;&lt; &quot;D1:Base&quot; &lt;&lt; std::endl;
                mtx.To_Pattern();
                };
                Mtx mtx;
};
class D2 : public Base
{
        public:       
                void bar() {
                    std::cout &lt;&lt; &quot;D2:Base&quot; &lt;&lt; std::endl;
                    mtx.To_Pattern();
                };
                Mtx mtx;
};

class MyClass
{
        public: 
          void foo(Base* base) {
                 base-&gt;bar();
                }
};

int main(int argc, char** argv)
{
        Base * base = NULL;
        D1 d1;
        D2 d2;

        base = &amp;d1;

        MyClass myclass;
        myclass.foo(base);

        return 0;
}
</code></pre>
<p>JETZT will ich aber in MyClass this (also sich selbt) verändern und möchte damit in Methode To_Pattern in Klasse Mtx ein Objekt vom Typ MyClass haebn - nur wie erreiche ich das?</p>
<p>ich versuche es vergeblich so:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

class Mtx
{
        public:
                MyClass* To_Pattern() {
          std::cout &lt;&lt; &quot;ToPattern&quot; &lt;&lt; std::endl;       
          MyClass * myclass = new MyClass();
          //mach was mit myclass und gibs zurück
          return myclass;
         };             
};

// die main
class Base
{
        public:
                virtual MyClass* bar() = 0;       
};
class D1 : public Base
{
        public:
                MyClass* bar() {
                std::cout &lt;&lt; &quot;D1:Base&quot; &lt;&lt; std::endl;
                return mtx.To_Pattern();
                };
                Mtx mtx;
};
class D2 : public Base
{
        public:       
                MyClass* bar() {
                    std::cout &lt;&lt; &quot;D2:Base&quot; &lt;&lt; std::endl;
                    return mtx.To_Pattern();
                };
                Mtx mtx;
};

class MyClass
{
        public: 
          void foo(Base* base) {
                 this = base-&gt;bar();
                }
};

int main(int argc, char** argv)
{
        Base * base = NULL;
        D1 d1;
        D2 d2;

        base = &amp;d1;

        MyClass myclass;
        myclass.foo(base);

        return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1821911</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821911</guid><dc:creator><![CDATA[Gafabi]]></dc:creator><pubDate>Sun, 13 Dec 2009 11:59:50 GMT</pubDate></item><item><title><![CDATA[Reply to Basisklasse übergeben? on Sun, 13 Dec 2009 12:07:29 GMT]]></title><description><![CDATA[<p>Viel zu viel Code! Schlecht eingerückt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /><br />
Trotzdem:</p>
<pre><code class="language-cpp">this = base-&gt;bar();
</code></pre>
<p>geht nicht, weil this ist const, man kann &quot;this&quot; keine andere Adresse zuweisen.<br />
So was macht man aber auch echt nicht!</p>
<p>P.S.: Dein jetziges &quot;Problem&quot; deckt sich <em>nicht</em> mit der anfangs angedeuteten (und nicht geposteten) Fehlermeldung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1821914</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821914</guid><dc:creator><![CDATA[Lästermaul]]></dc:creator><pubDate>Sun, 13 Dec 2009 12:07:29 GMT</pubDate></item><item><title><![CDATA[Reply to Basisklasse übergeben? on Sun, 13 Dec 2009 12:11:45 GMT]]></title><description><![CDATA[<p>also jetzt platzt mir doch der kragen: jedesmal wenn ich poste heisst:</p>
<p>a) Nicht immer einen neuen thread aufmachen wenn das problem rein passt. Klar ists was anderes - aber ich kann den titel nicht mehr ändern.</p>
<p>b) Ich soll funktionierendes minimalbeispiel posten. Habe ich getan.</p>
<p>Und jetzt störts schon wieder also bitte....</p>
<p>Back to topic:</p>
<p>Kann ich denn sowas machen:</p>
<pre><code class="language-cpp">base-&gt;bar(this);
</code></pre>
<p>und dann this verändern. geht wohl auch nicht oder?</p>
<p>Falls nicht: Wie kann ich mein Problem beheben? Ich will in der Klasse ein Objekt verändern über eine Andere klasse. Unsauber?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1821917</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821917</guid><dc:creator><![CDATA[gafabi]]></dc:creator><pubDate>Sun, 13 Dec 2009 12:11:45 GMT</pubDate></item><item><title><![CDATA[Reply to Basisklasse übergeben? on Sun, 13 Dec 2009 12:28:49 GMT]]></title><description><![CDATA[<p>gafabi schrieb:</p>
<blockquote>
<p>Kann ich denn sowas machen:</p>
<pre><code class="language-cpp">base-&gt;bar(this);
</code></pre>
<p>und dann this verändern. geht wohl auch nicht oder?</p>
</blockquote>
<p>this ist auch da nicht veränderbar!<br />
Du kannst natürlich sehrwohl non-const Methoden darauf aufrufen, aber du kannst this keine andere Adresse zuweisen! Egal wie du das drehen willst!</p>
<blockquote>
<p>Falls nicht: Wie kann ich mein Problem beheben? Ich will in der Klasse ein Objekt verändern über eine Andere klasse. Unsauber?</p>
</blockquote>
<p>Indem du einfach nicht versuchst ein Objekt such selbst ändern zu lassen. Ergo gehört das außerhalb von deiner Instanz gemacht, egal wie und egal wo.<br />
Bedenke, dass wenn du einem Pointer einen neuen &quot;Wert&quot; gibst, es also auf ein anderes Objekt zeigen lässt, das vorher referenzierte Objekt nicht mehr über diesen pointer zugänglich ist. Wenn also der Pointer der einzige ist, der auf das Objekt zeigt, musst (!) du ihn mit delete löschen, um ein Speicherleck zu verhindern.</p>
<p>[OT]<br />
Du brauchst Mtx nicht für dein Beispiel, ebenso keine verschiedenen Ableitungen von Base für ein Minimalbeispiel. Da muss man erst ewig durch den schlecht eingerückten Texkt suchen um deine Klassen und Methoden zu finden. (Setze &quot;Ewig&quot; in den zeitlichen Rahmen, den man sich eines Problems annehmen &quot;will&quot;.)<br />
Und das wichtigste ist einfach die Fehlermeldung, die du uns in diesem Post bisher vollkommen vorenthalten hast. Es bringt A) nichts, einen Codefetzen hinzuknallen, der vollkommen frei ohne Kontext im Raum steht, <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--smiling_face_with_sunglasses"
      title="B)"
      alt="😎"
    /> viel Code zu posten, den man erst kompilieren muss um überhaupt zu erahnen, welchen Fehler du bekommen haben könntest.<br />
Denn erfahrene Augen sehen anhand der Fehlermeldung meist schon welches Problem du hast. Aer eben nicht immer...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1821924</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821924</guid><dc:creator><![CDATA[Lästermaul]]></dc:creator><pubDate>Sun, 13 Dec 2009 12:28:49 GMT</pubDate></item><item><title><![CDATA[Reply to Basisklasse übergeben? on Sun, 13 Dec 2009 12:35:40 GMT]]></title><description><![CDATA[<p>Ja. Du kannst this einer beliebigen Funktion übergeben und dann da mittels der Schnittstelle (öffentliche Funktionen) das Objet bearbeiten.</p>
<p>Dazu muss bar lediglich einen Zeiger auf MyClass erhalten:</p>
<pre><code class="language-cpp">class Base
{
        public:
               virtual void bar(MyClass* m) = 0;      
};
</code></pre>
<p>btw:<br />
Schlecht eingerückt ist es und das solltest du schon richtig machen. Die IDE deiner Wahl unterstützt dich dabei enorm.</p>
<p>Und das hier:</p>
<pre><code class="language-cpp">MyClass* To_Pattern() {
          std::cout &lt;&lt; &quot;ToPattern&quot; &lt;&lt; std::endl;      
          MyClass * myclass = new MyClass();
          //mach was mit myclass und gibs zurück
          return myclass;
         };
</code></pre>
<p>ist böse. Du erzeugst da einen Zeiger und gibst ihn nie wieder frei. Sprich der User von To_Pattern müsste das machen, was in deinem Code aber nie geschieht. Grundsätzlich sollte immer derjenige, der Speicher explizit anfordert den auch wieder freigeben.</p>
<p>@Lästermaul:</p>
<blockquote>
<p>this ist auch da nicht veränderbar!<br />
Du kannst natürlich sehrwohl non-const Methoden darauf aufrufen, aber du kannst this keine andere Adresse zuweisen! Egal wie du das drehen willst!</p>
</blockquote>
<p>Du scheinst da etwas zu verwechseln. this ist ein konstanter Zeiger auf ein <strong>nichtkonstantes</strong> Objekt (wenn er aus einem nichtkonstantem Objekt kommt).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1821925</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821925</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 13 Dec 2009 12:35:40 GMT</pubDate></item><item><title><![CDATA[Reply to Basisklasse übergeben? on Sun, 13 Dec 2009 12:49:12 GMT]]></title><description><![CDATA[<p>Also danke schonmal. Leider verstehe ichs noch nicht und komme nicht auf die Lösung. Ich versuche es im Moment so:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

class Pattern
{
    public: 
         void foo(Base&amp; base)
         {
             base.To_Pattern(this);
         }
};

// die main
class Base
{
  public:
          virtual void To_Pattern(Pattern*&amp; P) = 0;       

};
class D1 : public Base
{
    public:
        void To_Pattern(Pattern *&amp; P) 
        {
            std::cout &lt;&lt; &quot;D1:Base&quot; &lt;&lt; std::endl;
            //auf P arbeiten
        }
};
class D2 : public Base
{
    public:       
        void To_Pattern(Pattern*&amp; P) 
        {
            std::cout &lt;&lt; &quot;D2:Base&quot; &lt;&lt; std::endl;
            // auf P arbeiten
        }
};

int main(int argc, char** argv)
{
        Base * base = NULL;
        D1 d1;
        D2 d2;
        base = &amp;d1;
        MyClass myclass;
        myclass.foo(base);
        return 0;
}
</code></pre>
<p>Die compiler-meldung ist:</p>
<pre><code>Fehler: »Base« wurde nicht deklariert
main.cpp: In member function »void Pattern::foo(int&amp;)«:
main.cpp:13: Fehler: Abfrage des Elementes »To_Pattern« in »base«, das vom Nicht-Klassentyp »int« ist
main.cpp: In function »int main(int, char**)«:
main.cpp:49: Fehler: »MyClass« wurde in diesem Gültigkeitsbereich nicht definiert
main.cpp:49: Fehler: expected `;' before »myclass«
main.cpp:50: Fehler: »myclass« wurde in diesem Gültigkeitsbereich nicht definiert
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1821928</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821928</guid><dc:creator><![CDATA[Gafabi]]></dc:creator><pubDate>Sun, 13 Dec 2009 12:49:12 GMT</pubDate></item><item><title><![CDATA[Reply to Basisklasse übergeben? on Sun, 13 Dec 2009 12:55:25 GMT]]></title><description><![CDATA[<p>Pattern benutzt Base, also muss Base vor Pattern definiert sein.</p>
<p>Vor der Base reicht eine Vorwärtsdeklaration von Pattern.<br />
(Siehe auch <a href="http://www.drakon.ch/?id=1200&amp;offset=&amp;mobile=0&amp;show_entry=77" rel="nofollow">hier</a>)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1821933</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821933</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 13 Dec 2009 12:55:25 GMT</pubDate></item><item><title><![CDATA[Reply to Basisklasse übergeben? on Sun, 13 Dec 2009 12:57:08 GMT]]></title><description><![CDATA[<p>sorry - ich meinte diesen code:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

class Pattern
{
    public: 
         void foo(Base* base)
         {
             base-&gt;To_Pattern(this);
         }
};

// die main
class Base
{
  public:
          virtual void To_Pattern(Pattern*&amp; P) = 0;       

};
class D1 : public Base
{
    public:
        void To_Pattern(Pattern *&amp; P) 
        {
            std::cout &lt;&lt; &quot;D1:Base&quot; &lt;&lt; std::endl;
            //auf P arbeiten
        }
};
class D2 : public Base
{
    public:       
        void To_Pattern(Pattern*&amp; P) 
        {
            std::cout &lt;&lt; &quot;D2:Base&quot; &lt;&lt; std::endl;
            // auf P arbeiten
        }
};

int main(int argc, char** argv)
{
        Base * base = NULL;
        D1 d1;
        D2 d2;
        base = &amp;d1;
        Pattern pat;
        pat.foo(base);
        return 0;
}
</code></pre>
<p>mit folgender meldung:</p>
<pre><code>g++ -o out main.cpp
main.cpp:7: Fehler: »Base« wurde nicht deklariert
main.cpp: In member function »void Pattern::foo(int*)«:
main.cpp:9: Fehler: Abfrage des Elementes »To_Pattern« in »* base«, das vom Nicht-Klassentyp »int« ist
main.cpp: In function »int main(int, char**)«:
main.cpp:46: Fehler: keine passende Funktion für Aufruf von »Pattern::foo(Base*&amp;)«
main.cpp:7: Anmerkung: Kandidaten sind: void Pattern::foo(int*)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1821935</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821935</guid><dc:creator><![CDATA[gafabi]]></dc:creator><pubDate>Sun, 13 Dec 2009 12:57:08 GMT</pubDate></item><item><title><![CDATA[Reply to Basisklasse übergeben? on Sun, 13 Dec 2009 12:58:57 GMT]]></title><description><![CDATA[<p>Gleiches Problem.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1821936</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821936</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 13 Dec 2009 12:58:57 GMT</pubDate></item><item><title><![CDATA[Reply to Basisklasse übergeben? on Sun, 13 Dec 2009 13:03:32 GMT]]></title><description><![CDATA[<p>ja ich habs gesehen. langsam kommen wir zu der meldung die mein haupt-code produziert.</p>
<p>Ich bitte nochmals um folgende betrachtung:</p>
<p><a href="//Pattern.h">//Pattern.h</a></p>
<pre><code class="language-cpp">#ifndef My_H
#define My_H

#include &quot;Base.h&quot;

class Pattern
{
        public: 
                void foo(Base* base)
                {
                        base-&gt;To_Pattern(this);
                }
};

#endif
</code></pre>
<p><a href="//Base.h">//Base.h</a></p>
<pre><code class="language-cpp">#ifndef Bs_H
#define Bs_H

#include &quot;Pattern.h&quot;

// die main
class Base
{
        public:
                virtual void To_Pattern(Pattern*&amp; P) = 0;       

};

#endif
</code></pre>
<p><a href="//D1.h">//D1.h</a></p>
<pre><code class="language-cpp">#ifndef D1_H
#define D1_H

#include &quot;Pattern.h&quot;
#include &quot;Base.h&quot;

class D1 : public Base
{
        public:
                void To_Pattern(Pattern *&amp; P) 
                {
                        std::cout &lt;&lt; &quot;D1:Base&quot; &lt;&lt; std::endl;
            //auf P arbeiten
                }
};

#endif
</code></pre>
<p><a href="//D2.h">//D2.h</a></p>
<pre><code class="language-cpp">#ifndef D2_H
#define D2_H

#include &quot;Pattern.h&quot;
#include &quot;Base.h&quot;

class D2 : public Base
{
        public:       
                void To_Pattern(Pattern*&amp; P) 
                {
                        std::cout &lt;&lt; &quot;D2:Base&quot; &lt;&lt; std::endl;
            // auf P arbeiten
                }
};

#endif
</code></pre>
<p><a href="//Main.cpp">//Main.cpp</a></p>
<pre><code class="language-cpp">#include &quot;Base.h&quot;
#include &quot;Pattern.h&quot;
#include &quot;D1.h&quot;
#include &quot;D2.h&quot;

int main(int argc, char** argv)
{
        Base * base = NULL;
        D1 d1;
        D2 d2;
        base = &amp;d1;
        Pattern pat;
        pat.foo(base);
        return 0;
}
</code></pre>
<p>Mit folgender meldung:</p>
<pre><code>Pattern.h:10: Fehler: »Base« wurde nicht deklariert
Pattern.h: In member function »void Pattern::foo(int*)«:
Pattern.h:12: Fehler: Abfrage des Elementes »To_Pattern« in »* base«, das vom Nicht-Klassentyp »int« ist
main.cpp: In function »int main(int, char**)«:
main.cpp:22: Fehler: keine passende Funktion für Aufruf von »Pattern::foo(Base*&amp;)«
Pattern.h:10: Anmerkung: Kandidaten sind: void Pattern::foo(int*)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1821938</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821938</guid><dc:creator><![CDATA[gafabi]]></dc:creator><pubDate>Sun, 13 Dec 2009 13:03:32 GMT</pubDate></item><item><title><![CDATA[Reply to Basisklasse übergeben? on Sun, 13 Dec 2009 13:08:03 GMT]]></title><description><![CDATA[<p>Da sind wir ja schon nen Schritt weiter <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="🙂"
    /><br />
Pattern hat eine Funktion, die mit einem Base arbeitet.<br />
Base ist du diesem Zeitpunkt noch nicht bekannt, wird ja erst nachher deklariert.<br />
Mit einer Vorab-Deklaration kommst du nicht weiter, da do nur der Typenname bekannt ist, aber nicht seine Schnittstelle.</p>
<p>Einzige Lösung:<br />
Dein &quot;main.cpp&quot; in verschieden Header (<em>.h) und Implementiereungen (</em>.cpp) aufteilen. Dann reicht im Header eine Forward-Deklaration, im .cpp wird dann der jeweils andere Header mit includiert.<br />
Im Prinzip sollte es reichen, Pattern von den restlichen Klassen zu separieren.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/18422">@Drakon</a>:<br />
Danke!</p>
<pre><code>Fehler: Als linker Operand einer Zuweisung wird L-Wert erfordert
</code></pre>
<p>kommt wenn ich &quot;this = new Test;&quot; versuche.<br />
An eine Funktion das this übergeben macht aber keine Probleme! Das hatte ich so nicht erwartet.<br />
Aber funktionieren tut es nur, wenn das Objekt mit &quot;new&quot; erstellt wurde. Sonst -&gt; SegFault!</p>
<p>Interessant fand ich auch, dass das Objekt an der selben Stelle im Speicher erstellt wurde! Egal ob vorher delete oder nicht!</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

struct Test;
void modify(Test*);

struct Test
{
    int num;
    void modifyThis()
    {
        num = 3;
        cout &lt;&lt; this &lt;&lt; endl;
        modify(this);
        cout &lt;&lt; num &lt;&lt; endl;
    }
    ~Test()
    {
        cout &lt;&lt; &quot;destroy &quot; &lt;&lt; this &lt;&lt; endl;
    }
};

void modify(Test* t)
{
    cout &lt;&lt; &quot;modifiy &quot; &lt;&lt; t &lt;&lt; endl;
    delete t; // Auskommentieren, dann verschwindet der Segfault, die Adresse ändert sich nicht!
    t = new Test;
}

int main()
{
    Test* t = new Test;
    t-&gt;modifyThis();
    cout &lt;&lt; &quot;*** &quot; &lt;&lt; t &lt;&lt; endl;
    Test t3;
    t3.modifyThis(); // &lt;== Segfault!!!
}
</code></pre>
<p>Also Vorsicht beim Überschreiben des this-Pointers.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1821942</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821942</guid><dc:creator><![CDATA[Lästermaul]]></dc:creator><pubDate>Sun, 13 Dec 2009 13:08:03 GMT</pubDate></item><item><title><![CDATA[Reply to Basisklasse übergeben? on Sun, 13 Dec 2009 13:12:27 GMT]]></title><description><![CDATA[<p>puh...also danke schonmal...</p>
<blockquote>
<p>Einzige Lösung:<br />
Dein &quot;main.cpp&quot; in verschieden Header (<em>.h) und Implementiereungen (</em>.cpp) aufteilen. Dann reicht im Header eine Forward-Deklaration, im .cpp wird dann der jeweils andere Header mit includiert.<br />
Im Prinzip sollte es reichen, Pattern von den restlichen Klassen zu separieren.</p>
</blockquote>
<p>aj aj aj...ich überlege wie ich das ändern kann weil mir der lösungsvorschlag zu aufwändig/seltsam ist. Evtl. ist bei mir falsches design die grundlage...</p>
<p>hmm...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1821945</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821945</guid><dc:creator><![CDATA[gafabi]]></dc:creator><pubDate>Sun, 13 Dec 2009 13:12:27 GMT</pubDate></item><item><title><![CDATA[Reply to Basisklasse übergeben? on Sun, 13 Dec 2009 13:17:24 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">//Base.h
#ifndef Bs_H
#define Bs_H

//#include &quot;Pattern.h&quot; // nein!
class Patern; // ja!

// die main
class Base
{
        public:
                virtual void To_Pattern(Pattern*&amp; P) = 0;      

};

#endif
</code></pre>
<blockquote>
<p>An eine Funktion das this übergeben macht aber keine Probleme! Das hatte ich so nicht erwartet.<br />
Aber funktionieren tut es nur, wenn das Objekt mit &quot;new&quot; erstellt wurde. Sonst -&gt; SegFault!</p>
</blockquote>
<p>Nein, nein, nein. Du verstehst das etwas völlig falsch!</p>
<pre><code class="language-cpp">void modify(Test* t) // hier wird der this Zeiger kopiert
{
    cout &lt;&lt; &quot;modifiy &quot; &lt;&lt; t &lt;&lt; endl;
    delete t; // das ist ganz klar böse, wenn du ein automatisches Objekt hast
    t = new Test; // das weist t einen neuen Zeiger zu und nicht dem Objekt, auf welches t vorher gezeit hat.
}
</code></pre>
<p>Ich hoffe du verstehst das jetzt, ansonsten muss ich wirklich auch noch mit ASCII Art anfangen. :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1821946</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821946</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 13 Dec 2009 13:17:24 GMT</pubDate></item><item><title><![CDATA[Reply to Basisklasse übergeben? on Sun, 13 Dec 2009 13:33:23 GMT]]></title><description><![CDATA[<p>Hier einfach mal die Lösung zu deinem Problem.<br />
Es geht nicht einfacher bei solchen gegenseitigen Abhängigkeiten.</p>
<p>Base.h</p>
<pre><code class="language-cpp">#ifndef BASE_H
#define BASE_H

class Pattern;

class Base 
{ 
    public: 
        virtual void To_Pattern(Pattern* P) = 0;
};

class D : public Base 
{ 
    public: 
        void To_Pattern(Pattern * P);
};

#endif
</code></pre>
<p>Base.cpp</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

#include &quot;Base.h&quot;
#include &quot;Pattern.h&quot;

void D::To_Pattern(Pattern * P)
{
    std::cout &lt;&lt; &quot;D1:Base&quot; &lt;&lt; std::endl; 
    //auf P arbeiten 
}
</code></pre>
<p>Pattern.h</p>
<pre><code class="language-cpp">#ifndef PATTERN_H
#define PATTERN_H

class Base;

class Pattern 
{ 
    public:
        void foo(Base* base);
}; 

#endif
</code></pre>
<p>Pattern.cpp</p>
<pre><code class="language-cpp">#include &quot;Pattern.h&quot;
#include &quot;Base.h&quot;

void Pattern::foo(Base* base)
{ 
    base-&gt;To_Pattern(this); 
}
</code></pre>
<p>main.cpp</p>
<pre><code class="language-cpp">#include &quot;Base.h&quot;
#include &quot;Pattern.h&quot;

int main(int argc, char** argv) 
{
    Base * base = 0; 
    D d1;
    base = &amp;d1; 
    Pattern pat; 
    pat.foo(base); 
    return 0; 
}
</code></pre>
<p>Kompilieren:</p>
<pre><code>$ g++ -c Pattern.cpp
$ g++ -c Base.cpp
$ g++ main.cpp -o main Base.o Pattern.o
$ ./main
</code></pre>
<pre><code class="language-cpp">void modify(Test* t) // hier wird der this Zeiger kopiert
{
    cout &lt;&lt; &quot;modifiy &quot; &lt;&lt; t &lt;&lt; endl;
    delete t; // das ist ganz klar böse, wenn du ein automatisches Objekt hast
    t = new Test; // das weist t einen neuen Zeiger zu und nicht dem Objekt, auf welches t vorher gezeit hat.
}
</code></pre>
<p>In der letzten Zeile dein Kommentar:<br />
Ich habe auch gedacht, dass t nun auf ein neues Objekt, was ja definitiv an einer anderen Stelle im Speicher liegen müsste, zeigt.<br />
Die ganzen Test-Ausgaben vor, während und nach dem Modify zeigen mir in dem Fall aber ein anderes Bild:</p>
<pre><code>0x603010
modifiy 0x603010
destroy 0x603010
0
*** 0x603010
</code></pre>
<p>Es ist IMMER die selbe Adresse, demnach wird die selbe Speicherstelle überschrieben... Oder bin ich da jetzt wieder total daneben?</p>
<p>Ein späteres</p>
<pre><code class="language-cpp">t = new Test;
cout &lt;&lt; t &lt;&lt; endl;
t = new Test;
cout &lt;&lt; t &lt;&lt; endl;
</code></pre>
<p>liefert wie erwartet</p>
<pre><code>0x603030
0x603050
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1821951</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821951</guid><dc:creator><![CDATA[Lästermaul]]></dc:creator><pubDate>Sun, 13 Dec 2009 13:33:23 GMT</pubDate></item><item><title><![CDATA[Reply to Basisklasse übergeben? on Sun, 13 Dec 2009 13:52:49 GMT]]></title><description><![CDATA[<p>Mach mal das hier:</p>
<pre><code class="language-cpp">void modify(Test* t) // hier wird der this Zeiger kopiert
{
    cout &lt;&lt; &quot;modifiy &quot; &lt;&lt; t &lt;&lt; endl;
    delete t; 
    t = new Test; 
    cout &lt;&lt; &quot;modifyed t: &quot; &lt;&lt; t &lt;&lt; endl;
    delete t; // jetzt auch wieder aufräumen
}
</code></pre>
<p>Du kannst t ja gar nicht kennen ausserhalb der Funktion.. Du hast klar immer den gleichen Wert ausgegeben.</p>
<pre><code class="language-cpp">...
        cout &lt;&lt; this &lt;&lt; endl; (1)
        modify(this); (2)
    }
    ~Test()
    {
        cout &lt;&lt; &quot;destroy &quot; &lt;&lt; this &lt;&lt; endl; (3)
    }
...

0x603010 (1)
modifiy 0x603010 (2) (innerhalb von modify)
destroy 0x603010 (3)
0 ??
*** 0x603010 ??
</code></pre>
<p>Mit dem obigen Code müsste zwischen 2 und 3 ein anderer Zeiger ausgegeben werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1821954</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821954</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 13 Dec 2009 13:52:49 GMT</pubDate></item><item><title><![CDATA[Reply to Basisklasse übergeben? on Sun, 13 Dec 2009 14:33:25 GMT]]></title><description><![CDATA[<p>Hmmm...</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

struct Test;
void modify(Test*);

struct Test
{
    void modifyThis()
    {
        cout &lt;&lt; &quot;=== Test::modifiyThis() (this == &quot; &lt;&lt; this &lt;&lt; &quot;) === &quot; &lt;&lt; endl;
        modify(this);
        cout &lt;&lt; &quot;after modify() &quot; &lt;&lt; this &lt;&lt; endl;
        cout &lt;&lt; &quot;======&quot; &lt;&lt; endl;
    }
    ~Test()
    {
        cout &lt;&lt; &quot;destroy &quot; &lt;&lt; this &lt;&lt; endl;
    }
};

void modify(Test* t)
{
    cout &lt;&lt; &quot;modifiy &quot; &lt;&lt; t &lt;&lt; endl;
    delete t;
    t = 0;
    t = new Test;
    cout &lt;&lt; &quot;modified t: &quot; &lt;&lt; t &lt;&lt; endl;
    delete t;
}

int main()
{
    Test* t = new Test;
    t-&gt;modifyThis();
    cout &lt;&lt; &quot;*** &quot; &lt;&lt; t &lt;&lt; endl;
    delete t;
}
</code></pre>
<p>Das finale &quot;delete t&quot; in modify() beschert mir einen segfault beim finalen delete in main()...<br />
Ebenso wie ein weiterer Aufruf von modifyThis().<br />
Ich find das lustig, weil ich ohne weiteres noch mit dem Objekt arbeiten konnte, auf Member zugreifen usw. aber ein zweites delete geht in die Hose.</p>
<p>Außerdem, egal an welcher Stelle ich noch die Adresse ausgeben lasse (in Test::modifyThis(), modify() oder main()), immer ist es die Selbe...</p>
<blockquote>
<p>Du kannst t ja gar nicht kennen ausserhalb der Funktion.. Du hast klar immer den gleichen Wert ausgegeben.</p>
</blockquote>
<p>Hmm, ich kann doch belibig Zeiger kopieren und dann vergleichen, das sollte bei egal wie gearteten Aufrufen bei gleichen Adressen das gleiche Ergebnis liefern.<br />
Ob ich in einer Memberfunktion jetzt &quot;this&quot; mit einem übergebenen Pointer vergleiche oder zwei Pointer in einer freien Funktion oder direkt, oder ...</p>
<p>Ich glaub ich muss da nochmal drüber schlafen...<br />
Vllt. küsst mich die Erkenntnis ja noch <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":/"
      alt="😕"
    /></p>
<p>Grüße und Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1821969</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821969</guid><dc:creator><![CDATA[Lästermaul]]></dc:creator><pubDate>Sun, 13 Dec 2009 14:33:25 GMT</pubDate></item><item><title><![CDATA[Reply to Basisklasse übergeben? on Sun, 13 Dec 2009 14:38:05 GMT]]></title><description><![CDATA[<p>Ich habe doch gesagt, dass das obige delete böse per se ist.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

struct Test;
void modify(Test*);

struct Test
{
    void modifyThis()
    {
        cout &lt;&lt; &quot;=== Test::modifiyThis() (this == &quot; &lt;&lt; this &lt;&lt; &quot;) === &quot; &lt;&lt; endl;
        modify(this);
        cout &lt;&lt; &quot;after modify() &quot; &lt;&lt; this &lt;&lt; endl;
        cout &lt;&lt; &quot;======&quot; &lt;&lt; endl;
    }
    ~Test()
    {
        cout &lt;&lt; &quot;destroy &quot; &lt;&lt; this &lt;&lt; endl;
    }
};

void modify(Test* t)
{
    cout &lt;&lt; &quot;modifiy &quot; &lt;&lt; t &lt;&lt; endl; // ok, gibt das gleiche, wie this
    //delete t; // böse, böse böse! 
    t = 0; // ok
    t = new Test; // ok
    cout &lt;&lt; &quot;modified t: &quot; &lt;&lt; t &lt;&lt; endl; //ok, sollte was anderes ausgeben
    delete t; // ok
}

int main()
{
    Test* t = new Test; // ok
    t-&gt;modifyThis(); //ok
    cout &lt;&lt; &quot;*** &quot; &lt;&lt; t &lt;&lt; endl; //ok, gibt das gleiche, wie this
    delete t; // wenn das innere delete aktiviert ist, wird hier der speicher erneut zerstört und das gibt den fehler!
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1821972</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821972</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 13 Dec 2009 14:38:05 GMT</pubDate></item><item><title><![CDATA[Reply to Basisklasse übergeben? on Sun, 13 Dec 2009 14:41:50 GMT]]></title><description><![CDATA[<p>Lästermaul schrieb:</p>
<blockquote>
<p>Das finale &quot;delete t&quot; in modify() beschert mir einen segfault beim finalen delete in main()...</p>
</blockquote>
<p>Das ist nicht verwunderlich, der Speicher wurde ja bereits freigegeben.</p>
<p>Lästermaul schrieb:</p>
<blockquote>
<p>Ich find das lustig, weil ich ohne weiteres noch mit dem Objekt arbeiten konnte, auf Member zugreifen usw. aber ein zweites delete geht in die Hose.</p>
</blockquote>
<p>Ziehe keine Schlüsse aufgrund solcher Aktionen. Sobald ein Objekt zerstört wurde, resultiert der Zugriff darauf in undefiniertem Verhalten. Das bedeutet, es ist reines Glück, falls das Programm abstürzt.</p>
<p>Lästermaul schrieb:</p>
<blockquote>
<p>Hmm, ich kann doch belibig Zeiger kopieren und dann vergleichen, das sollte bei egal wie gearteten Aufrufen bei gleichen Adressen das gleiche Ergebnis liefern.<br />
Ob ich in einer Memberfunktion jetzt &quot;this&quot; mit einem übergebenen Pointer vergleiche oder zwei Pointer in einer freien Funktion oder direkt, oder ...</p>
</blockquote>
<p>Du übergibst eben eine Kopie des Zeigers, deshalb führt das <code>t = new Test;</code> in <code>modify()</code> nicht dazu, dass der originale Zeiger neu zugewiesen wird. Der <code>this</code> -Zeiger kann nämlich nicht verändert werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1821974</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821974</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 13 Dec 2009 14:41:50 GMT</pubDate></item><item><title><![CDATA[Reply to Basisklasse übergeben? on Sun, 13 Dec 2009 14:46:27 GMT]]></title><description><![CDATA[<p>@Lästermaul</p>
<p>Lies Dir mal _genau_ durch was &quot;by Value&quot; bedeutet. Wenn Du erinen Zeiger by Value übergibst (was Du bei deinem Methodenaufruf nunmal machst) dann wird für den Scope der Methode ein temporärer Zeiger angelegt. Alle Veränderungen des Zeigers innerhalb der methode (new, delete etc) finden NUR auf diesem temporären Zeiger statt und sind daher außerhalb der Methode nicht relevant.</p>
<p>Natürlich können mehrere Zeiger auf das gleiche Objekt im Speicher zeigen, weist Du aber einem der Zeiger mittels new ein neues Objekt zu, hat das _keine_ Auswirkung auf die anderen Zeiger die nach wie vor auf das alte Objekt zeigen.</p>
<p>Um die Änderung am Zeiger innerhalb der Methode auch außerhalb sichtbar zu machen mußt Du den Zeiger &quot;by Reference&quot; übergeben, als sowas in der Art:</p>
<pre><code class="language-cpp">void modify(Test*&amp; t)
{
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1821977</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821977</guid><dc:creator><![CDATA[loks]]></dc:creator><pubDate>Sun, 13 Dec 2009 14:46:27 GMT</pubDate></item><item><title><![CDATA[Reply to Basisklasse übergeben? on Sun, 13 Dec 2009 15:38:12 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Lästermaul schrieb:</p>
<blockquote>
<p>Ich find das lustig, weil ich ohne weiteres noch mit dem Objekt arbeiten konnte, auf Member zugreifen usw. aber ein zweites delete geht in die Hose.</p>
</blockquote>
<p>Ziehe keine Schlüsse aufgrund solcher Aktionen. Sobald ein Objekt zerstört wurde, resultiert der Zugriff darauf in undefiniertem Verhalten. Das bedeutet, es ist reines Glück, falls das Programm abstürzt.</p>
</blockquote>
<p>Und genau das denk ich mir schon die ganze Zeit!!! Undefiniertes Verhalten.<br />
Dann ist der Kommentar von loks bezügl. delete auf eine Kopie eines Zeigers auch falsch. Ich bin erleichtert!</p>
<blockquote>
<p>Du übergibst eben eine Kopie des Zeigers, deshalb führt das <code>t = new Test;</code> in <code>modify()</code> nicht dazu, dass der originale Zeiger neu zugewiesen wird. Der <code>this</code> -Zeiger kann nämlich nicht verändert werden.</p>
</blockquote>
<p>Dass man this (den this-Zeiger) nicht ändern kann, hab ich doch auch gesagt, trotzdem wurde mir wiedersprochen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /><br />
Das mit der Kopie des Zeigers ist mir jetzt auch klar.<br />
Werd mir das nochmal in Ruhe anschauen, ob ich das alles jetzt richtig begreife...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1821991</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821991</guid><dc:creator><![CDATA[Lästermaul]]></dc:creator><pubDate>Sun, 13 Dec 2009 15:38:12 GMT</pubDate></item><item><title><![CDATA[Reply to Basisklasse übergeben? on Sun, 13 Dec 2009 15:46:34 GMT]]></title><description><![CDATA[<p>loks hat schon Recht.</p>
<p>Du musst unterscheiden zwischen dem Zeiger als Objekt an sich und dem Speicherbereich, auf den er zeigt.</p>
<pre><code class="language-cpp">int* a = new int(4);
int* b = a;   // beide Zeiger zeigen auf 4
delete b;     // gibt die angeforderte Vier frei
b = 0;        // a ist nun NICHT Null.
</code></pre>
<p>Wenn du einen Zeiger als Value-Parameter übergibst, d.h. <code>void modify(Test* t)</code> , ist das eine Kopie, wie hier im Beispiel <code>b</code> . Änderungen am Speicherbereich dahinter sind von ausserhalb der Funktion sichtbar, Änderungen am Zeiger selbst jedoch nicht. Und zu letzteren gehört nun mal <code>t = new Test</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1821993</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821993</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 13 Dec 2009 15:46:34 GMT</pubDate></item><item><title><![CDATA[Reply to Basisklasse übergeben? on Sun, 13 Dec 2009 15:55:09 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>loks hat schon Recht.<br />
[...]</p>
<p>Wenn du einen Zeiger als Value-Parameter übergibst, d.h. <code>void modify(Test* t)</code> , ist das eine Kopie, wie hier im Beispiel <code>b</code> . Änderungen am Speicherbereich dahinter sind von ausserhalb der Funktion sichtbar, Änderungen am Zeiger selbst jedoch nicht. Und zu letzteren gehört nun mal <code>t = new Test</code> .</p>
</blockquote>
<p>loks schrieb:</p>
<blockquote>
<p>Alle Veränderungen des Zeigers innerhalb der methode (new, <strong>delete</strong> etc) finden NUR auf diesem temporären Zeiger statt und sind daher <strong>außerhalb der Methode nicht relevant.</strong></p>
</blockquote>
<p>Die allgemeine Formulierung ist aber irreführend.<br />
Es mag sein dass das delete für den Zeiger (!) außerhalb von modify() irrelevant ist. Trotzdem ist es im Allgemeinen nicht irrelevant, denn das delete verändert vllt. nicht den Zeiger, aber den Speicherbereich - Das Objekt auf welches der Zeiger zeigt wird gelöscht. Ab hier sind Zugriffe auf das Objekt undefiniert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1822001</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1822001</guid><dc:creator><![CDATA[Lästermaul]]></dc:creator><pubDate>Sun, 13 Dec 2009 15:55:09 GMT</pubDate></item><item><title><![CDATA[Reply to Basisklasse übergeben? on Sun, 13 Dec 2009 16:12:35 GMT]]></title><description><![CDATA[<p>Okay, da stimme ich dir zu, seine Aussage ist in der Tat etwas missverständlich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1822008</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1822008</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 13 Dec 2009 16:12:35 GMT</pubDate></item></channel></rss>