<?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[Cast von Member-Pointer zu Klassen-Pointer]]></title><description><![CDATA[<p>Hallo erstmal <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>
<p>Die Funktion void gibI(Birne* b) braucht den Pointer zu class A um Variable i auszulesen.<br />
Vererbung kann ich aus Gründen nicht benutzen.<br />
Wie cast ich das richtig?</p>
<p>So siehts aus:</p>
<pre><code>class Birne
{
public:
    int garbage [1000];
};

class A
{
public:
    short i;
    Birne b;
};

void gibI(Birne* b) {
    A* ptr = static_cast&lt;A*&gt;(b); // wie cast ich das richtig?
    cout() &lt;&lt; ptr-&gt;i;
}

int main()
{
    A a;
    a.i = 100;
    gibI(&amp;a.b);
    return 0;
}
</code></pre>
<p>Hilfe <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>
]]></description><link>https://www.c-plusplus.net/forum/topic/328602/cast-von-member-pointer-zu-klassen-pointer</link><generator>RSS for Node</generator><lastBuildDate>Tue, 07 Jul 2026 13:07:08 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/328602.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 18 Oct 2014 10:19:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Cast von Member-Pointer zu Klassen-Pointer on Sat, 18 Oct 2014 10:19:01 GMT]]></title><description><![CDATA[<p>Hallo erstmal <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>
<p>Die Funktion void gibI(Birne* b) braucht den Pointer zu class A um Variable i auszulesen.<br />
Vererbung kann ich aus Gründen nicht benutzen.<br />
Wie cast ich das richtig?</p>
<p>So siehts aus:</p>
<pre><code>class Birne
{
public:
    int garbage [1000];
};

class A
{
public:
    short i;
    Birne b;
};

void gibI(Birne* b) {
    A* ptr = static_cast&lt;A*&gt;(b); // wie cast ich das richtig?
    cout() &lt;&lt; ptr-&gt;i;
}

int main()
{
    A a;
    a.i = 100;
    gibI(&amp;a.b);
    return 0;
}
</code></pre>
<p>Hilfe <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2422767</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2422767</guid><dc:creator><![CDATA[bugtracker]]></dc:creator><pubDate>Sat, 18 Oct 2014 10:19:01 GMT</pubDate></item><item><title><![CDATA[Reply to Cast von Member-Pointer zu Klassen-Pointer on Sat, 18 Oct 2014 10:37:49 GMT]]></title><description><![CDATA[<p>So direkt ist das gar nicht zu casten. Dein b ist schließlich kein Zeiger auf das A, sondern auf einen Teil des A. Da musst du dir mit <a href="http://www.cplusplus.com/reference/cstddef/offsetof/" rel="nofollow">offsetof</a> oder ähnlichem selber ausrechnen, wie der Zeiger zuerst umgebogen werden muss, und dann kannst du ihn hinterher auf den richtigen Typ casten (reinterpret_cast). Und vorher zum Rechnen natürlich auch casten, halt auch char* oder ähnliches.</p>
<p>Bist du <em>wirklich</em> sicher, dass das Vorgehen eine gute Idee ist? Vielleicht ist dir ja bloß nicht bewusst, dass es eine bessere Lösung gibt, für was auch immer du vor hast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2422769</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2422769</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sat, 18 Oct 2014 10:37:49 GMT</pubDate></item><item><title><![CDATA[Reply to Cast von Member-Pointer zu Klassen-Pointer on Sat, 18 Oct 2014 12:04:27 GMT]]></title><description><![CDATA[<p>offsetof ist die Lösung, keine hübsche aber funktioniert, danke dafür <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>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Bist du <em>wirklich</em> sicher, dass das Vorgehen eine gute Idee ist?</p>
</blockquote>
<p>Nein <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>SeppJ schrieb:</p>
<blockquote>
<p>Vielleicht ist dir ja bloß nicht bewusst, dass es eine bessere Lösung gibt, für was auch immer du vor hast.</p>
</blockquote>
<p>Kann schon 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>
<p>Ich brauch das für nen Memory Manager.<br />
Ich muss bei der free(T* ptr) Funktion mich vom Object Pointer, zum Pool Object und dann weiter zum Memory Pool durchhangeln.<br />
Da fiel mir erstmal nix anderes ein.</p>
<p>Ich hatte erst mit -sizeof(int) versucht zum Anfang der Klasse zu kommen aber das klappte nicht, weil sizeof(int) = 4 ist, aber der Compiler <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /> meint 8 Byte reservieren zu müssen (was mir offsetof jetzt gezeigt hat)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2422789</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2422789</guid><dc:creator><![CDATA[bugtracker]]></dc:creator><pubDate>Sat, 18 Oct 2014 12:04:27 GMT</pubDate></item></channel></rss>