<?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[Merkwürdiges cast-Problem?]]></title><description><![CDATA[<p>Hallo <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
<pre><code class="language-cpp">struct f {};
struct fn : public f {};

class e 
{
    e* _e2;
    f* _f2;

public:
    e* getE() { return _e2; }
    void getE( e* E ) { _e2 = E; }
    f* getF() { return _f2; }
    void getF( e* E ) { _f2 = F; }

};

struct en : public e
{
    en* getE() { return e::getE(); }
    void setE( en* E ) { e::setE( E ); }

    fn* getF() { return e::getF(); }
    void setF( en* F ) { e::setF( F ); }

};

int main()
{
   en* a = new en();
   a-&gt;setE( new en() );
   a-&gt;getE()-&gt;setF( new fn() );

   e* b = a;

   a-&gt;getE()-&gt;getF(); 
   b-&gt;getE()-&gt;getF();// Anderer Zeiger 
}
</code></pre>
<p>Meine Klassen lassen sich auf e und f reduzieren. Das Problem tritt in den letzten beiden Zeilen auf. Die Speicheradressen unterscheiden sich aus unerklärlichen Gründen. Leider konnte ich den Bug nicht reproduzieren (d.h dieses beispiel sollte eigendlich funktionieren). Kann mir evtl jemand sagen wie ich den Grund herausfinden kann?</p>
<p>Werde bald ausführlicher, Danke! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/218649/merkwürdiges-cast-problem</link><generator>RSS for Node</generator><lastBuildDate>Thu, 08 Oct 2026 22:13:52 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/218649.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 23 Jul 2008 10:53:53 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Merkwürdiges cast-Problem? on Wed, 23 Jul 2008 10:53:53 GMT]]></title><description><![CDATA[<p>Hallo <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
<pre><code class="language-cpp">struct f {};
struct fn : public f {};

class e 
{
    e* _e2;
    f* _f2;

public:
    e* getE() { return _e2; }
    void getE( e* E ) { _e2 = E; }
    f* getF() { return _f2; }
    void getF( e* E ) { _f2 = F; }

};

struct en : public e
{
    en* getE() { return e::getE(); }
    void setE( en* E ) { e::setE( E ); }

    fn* getF() { return e::getF(); }
    void setF( en* F ) { e::setF( F ); }

};

int main()
{
   en* a = new en();
   a-&gt;setE( new en() );
   a-&gt;getE()-&gt;setF( new fn() );

   e* b = a;

   a-&gt;getE()-&gt;getF(); 
   b-&gt;getE()-&gt;getF();// Anderer Zeiger 
}
</code></pre>
<p>Meine Klassen lassen sich auf e und f reduzieren. Das Problem tritt in den letzten beiden Zeilen auf. Die Speicheradressen unterscheiden sich aus unerklärlichen Gründen. Leider konnte ich den Bug nicht reproduzieren (d.h dieses beispiel sollte eigendlich funktionieren). Kann mir evtl jemand sagen wie ich den Grund herausfinden kann?</p>
<p>Werde bald ausführlicher, Danke! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1552299</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1552299</guid><dc:creator><![CDATA[Pidgeon@work]]></dc:creator><pubDate>Wed, 23 Jul 2008 10:53:53 GMT</pubDate></item><item><title><![CDATA[Reply to Merkwürdiges cast-Problem? on Wed, 23 Jul 2008 11:17:11 GMT]]></title><description><![CDATA[<p>Der Code dürfte hinten und vorne nicht kompilieren <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=":confused:"
      alt="😕"
    /></p>
<p>Alleine schon <code>en* getE() { return e::getE(); }</code> , da e::getE() ja ein e* zurückgibt, was ja ge-upcast-ed werden müsste.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1552316</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1552316</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Wed, 23 Jul 2008 11:17:11 GMT</pubDate></item><item><title><![CDATA[Reply to Merkwürdiges cast-Problem? on Wed, 23 Jul 2008 11:19:55 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>Der Code dürfte hinten und vorne nicht kompilieren <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=":confused:"
      alt="😕"
    /></p>
<p>Alleine schon <code>en* getE() { return e::getE(); }</code> , da e::getE() ja ein e* zurückgibt, was ja ge-upcast-ed werden müsste.</p>
</blockquote>
<p>Dort vermute ich vielleicht auch ein Problem. Das hab ich vergessen hinzuschreiben aber ich mach das so:</p>
<pre><code class="language-cpp">return (en*)e::getE();
</code></pre>
<p>Entschuldigt bitte weiter kleine Fehlerchen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1552317</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1552317</guid><dc:creator><![CDATA[Pigeon@work]]></dc:creator><pubDate>Wed, 23 Jul 2008 11:19:55 GMT</pubDate></item><item><title><![CDATA[Reply to Merkwürdiges cast-Problem? on Wed, 23 Jul 2008 11:26:31 GMT]]></title><description><![CDATA[<p>Also bei mir ist die Ausgabe beider Zeiger identisch.</p>
<pre><code class="language-cpp">struct f {};
struct fn : public f {};

class e
{
    e* _e2;
    f* _f2;

public:
    e* getE() { return _e2; }
    void setE( e* E ) { _e2 = E; }
    f* getF() { return _f2; }
    void setF( f* F ) { _f2 = F; }

};

struct en : public e
{
    en* getE() { return static_cast&lt;en*&gt;(e::getE()); }
    void setE( en* E ) { e::setE( E ); }

    fn* getF() { return static_cast&lt;fn*&gt;(e::getF()); }
    void setF( fn* F ) { e::setF( F ); }

};

int main()
{
   en* a = new en();
   a-&gt;setE( new en() );
   a-&gt;getE()-&gt;setF( new fn() );

   e* b = a;

   std::cout &lt;&lt; a-&gt;getE()-&gt;getF() &lt;&lt; std::endl;
   std::cout &lt;&lt; b-&gt;getE()-&gt;getF() &lt;&lt; std::endl;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1552320</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1552320</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Wed, 23 Jul 2008 11:26:31 GMT</pubDate></item><item><title><![CDATA[Reply to Merkwürdiges cast-Problem? on Wed, 23 Jul 2008 11:26:33 GMT]]></title><description><![CDATA[<p>Mach mal dynamic_casts anstatt C-Casts. So zur Sicherheit. Oder allerwenigstens static_casts. Das hat nicht nur mit &quot;C++-Ästhetik&quot; zu tun.</p>
<p>Zeigen beide Zeiger auf ein gültiges Objekt / das selbe Objekt, auch wenn ihre Adressen anders sind? Es sind ja immerhin Zeiger auf ein f und ein fn. Siehe nächster Punkt.</p>
<p>Ist Mehrfachvererbung/virtuelle Vererbung im Spiel? Dann müssen sich die Zeiger im Regelfall sogar unterscheiden, weil beim Down-Cast der Offset entsprechend angepasst werden muss.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1552321</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1552321</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Wed, 23 Jul 2008 11:26:33 GMT</pubDate></item><item><title><![CDATA[Reply to Merkwürdiges cast-Problem? on Wed, 23 Jul 2008 11:54:32 GMT]]></title><description><![CDATA[<p>Oh ich spüre schon des Rätzels lösung!! Ja, ich habe eine virtuelle Funktion. Deshalb verändert sich auch der Zeiger leicht. (Sie bleibt immer ungefähr die Selbe). Jedoch scheint mein Objekt dann <strong>nicht</strong> gültig zu sein!</p>
<p>Ich werde heut Abend mal dynamic_cast probieren.</p>
<p>Muss ich auch beim downcast eine solche cast-Funktion anwenden??</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13210">@Badestrand</a>: Genau das ist das Problem. Ich kann den Bug nicht reproduzieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1552335</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1552335</guid><dc:creator><![CDATA[Pigeon@work]]></dc:creator><pubDate>Wed, 23 Jul 2008 11:54:32 GMT</pubDate></item><item><title><![CDATA[Reply to Merkwürdiges cast-Problem? on Wed, 23 Jul 2008 12:04:33 GMT]]></title><description><![CDATA[<p>Pigeon@work schrieb:</p>
<blockquote>
<p>Muss ich auch beim downcast eine solche cast-Funktion anwenden??</p>
</blockquote>
<p>Beim Down-Cast ja. Beim Up-Cast kann der Compiler das von alleine (außer bei virtuellen Basisklassen).</p>
<p>Bin nicht ganz sicher, ob du dir sicher bist, aber ein Down-Cast ist von einer Basis-Klasse auf eine abgeleitete Klasse. Up-Cast sollte dann klar sein <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/1552342</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1552342</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Wed, 23 Jul 2008 12:04:33 GMT</pubDate></item><item><title><![CDATA[Reply to Merkwürdiges cast-Problem? on Wed, 23 Jul 2008 12:41:53 GMT]]></title><description><![CDATA[<p>Pigeon@work schrieb:</p>
<blockquote>
<p>Oh ich spüre schon des Rätzels lösung!! Ja, ich habe eine virtuelle Funktion. Deshalb verändert sich auch der Zeiger leicht. (Sie bleibt immer ungefähr die Selbe). Jedoch scheint mein Objekt dann <strong>nicht</strong> gültig zu sein!</p>
</blockquote>
<p>Das ist wirr. dynamic_cast wird dein Problem wahrscheinlich nicht lösen. Was du aber auf jeden Fall <em>nicht</em> tun sollstest, ist die Verwendung von C-Style casts, denn deren Bedeutung kann subtil variieren ohne dass dies bei der Verwendung offensichtlich wird. Richtig wäre, diese Casts im Original durch static_cast zu ersetzen - bekommst du dann einen Fehler beim Compilieren, ist die Ursache des Problems klar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1552380</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1552380</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 23 Jul 2008 12:41:53 GMT</pubDate></item><item><title><![CDATA[Reply to Merkwürdiges cast-Problem? on Wed, 23 Jul 2008 14:38:57 GMT]]></title><description><![CDATA[<p>So es geht... Einmal musste ich dynamic_cast, das andere Mal static_cast anwenden***. Warum habe ich (NOCH) keine Ahnung .... ich danke euch <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="🙂"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>***</p>
<p>GCC schrieb:</p>
<blockquote>
<p>Fehler: dynamic_cast »((const en_t*)this)-&gt;en_t::&lt;anonymous&gt;.e_t::nextF()« (des Typs »class f_t*«) in Typ »class fn_t*« (source type is not polymorphic) kann nicht vorgenommen werden</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1552474</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1552474</guid><dc:creator><![CDATA[Pigeon]]></dc:creator><pubDate>Wed, 23 Jul 2008 14:38:57 GMT</pubDate></item></channel></rss>