<?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[Problem mit Referenz&#x2F;Zeiger]]></title><description><![CDATA[<p>Ich habe folgenden getter gegeben, mit dem ich arbeiten muss und nicht modifizieren darf.</p>
<pre><code class="language-cpp">const ContentMask&amp; getContentMask() const
{
      return *m_contentMask;
}
</code></pre>
<p>Mit diesem getter muss ich dann auf ein Objekt ContentMask zugreifen und diesem Objekt mittels eines setters einen neuen Wert setzen:</p>
<pre><code class="language-cpp">tile-&gt;getHeader().getContentMask().setHasList(TRUE);
</code></pre>
<p>Erhalte aber hierbei diese Fehlermeldung: <code>this-Zeiger kann nicht von 'const ContentMask' in 'ContentMask &amp;' konvertiert werden</code></p>
<p>Dann habe ich als nächstes einen Zeiger hergenommen, da ich von dem oberen getter ja eine Referenz erhalte:</p>
<pre><code class="language-cpp">ContentMask* mask = tile-&gt;getHeader().getContentMask();
mask-&gt;setHasList(TRUE);
</code></pre>
<p>Aber hier gibt es auch wieder eine Fehlermeldung: <code>const ContentMask' kann nicht in 'ContentMask *' konvertiert werden</code></p>
<p>Wie kann ich jetzt auf den setter zugreifen? Es muss ja irgendwie eine Möglichkeit geben...</p>
<p>Danke schon mal im Voraus, Bernd</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/248916/problem-mit-referenz-zeiger</link><generator>RSS for Node</generator><lastBuildDate>Wed, 16 Sep 2026 18:16:06 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/248916.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 31 Aug 2009 09:20:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit Referenz&#x2F;Zeiger on Mon, 31 Aug 2009 09:20:13 GMT]]></title><description><![CDATA[<p>Ich habe folgenden getter gegeben, mit dem ich arbeiten muss und nicht modifizieren darf.</p>
<pre><code class="language-cpp">const ContentMask&amp; getContentMask() const
{
      return *m_contentMask;
}
</code></pre>
<p>Mit diesem getter muss ich dann auf ein Objekt ContentMask zugreifen und diesem Objekt mittels eines setters einen neuen Wert setzen:</p>
<pre><code class="language-cpp">tile-&gt;getHeader().getContentMask().setHasList(TRUE);
</code></pre>
<p>Erhalte aber hierbei diese Fehlermeldung: <code>this-Zeiger kann nicht von 'const ContentMask' in 'ContentMask &amp;' konvertiert werden</code></p>
<p>Dann habe ich als nächstes einen Zeiger hergenommen, da ich von dem oberen getter ja eine Referenz erhalte:</p>
<pre><code class="language-cpp">ContentMask* mask = tile-&gt;getHeader().getContentMask();
mask-&gt;setHasList(TRUE);
</code></pre>
<p>Aber hier gibt es auch wieder eine Fehlermeldung: <code>const ContentMask' kann nicht in 'ContentMask *' konvertiert werden</code></p>
<p>Wie kann ich jetzt auf den setter zugreifen? Es muss ja irgendwie eine Möglichkeit geben...</p>
<p>Danke schon mal im Voraus, Bernd</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1769631</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1769631</guid><dc:creator><![CDATA[Bernd88]]></dc:creator><pubDate>Mon, 31 Aug 2009 09:20:13 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Referenz&#x2F;Zeiger on Mon, 31 Aug 2009 09:24:54 GMT]]></title><description><![CDATA[<p>Bitte erstmal C++ lernen. Du kannst bei einem konstanten Objekt auch nur const Funktionen aufrufen. Und du solltest es nur ein andere konstante Typen casten. f'`8k</p>
<p><div class="plugin-markdown"><input type="checkbox" id="checkbox246208" /><label for="checkbox246208"></label></div><a href="http://tggc.tg.funpic.de/index.php?cat=8&amp;page=5" rel="nofollow">Autocogito</a></p>
<p>Gruß, TGGC (<a href="http://www.gamestar.de/index.cfm?pid=819&amp;pk=12279" rel="nofollow">Was Gamestar sagt...</a>)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1769633</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1769633</guid><dc:creator><![CDATA[TGGC]]></dc:creator><pubDate>Mon, 31 Aug 2009 09:24:54 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Referenz&#x2F;Zeiger on Mon, 31 Aug 2009 09:26:57 GMT]]></title><description><![CDATA[<p>Bernd88 schrieb:</p>
<blockquote>
<p>Es muss ja irgendwie eine Möglichkeit geben...</p>
</blockquote>
<p>Wieso? const heißt konstant, oder &quot;ich kann nicht verändert werden&quot;. Wenn die Methode eine const-Referenz zurückgibt, dann tut sie das in dem Wissen, dass niemand über diese Referenz das Objekt verändert.</p>
<p>Wenn du trotzdem unbedingt das const weghaben willst, kannst du es wegcasten:</p>
<blockquote>
<p>ContentMask&amp; contentMask = const_cast&lt;ContentMask&amp;&gt;(tile-&gt;getHeader().getContentMask());<br />
contentMask.setHasList(TRUE);</p>
</blockquote>
<p>Dann kann es aber gut sein, dass dir das Programm um die Ohren fliegt oder du wegen groben Unfugs die Kündigung bekommst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1769638</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1769638</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Mon, 31 Aug 2009 09:26:57 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Referenz&#x2F;Zeiger on Mon, 31 Aug 2009 09:28:28 GMT]]></title><description><![CDATA[<p>Dem Code nach zu urteilen, den du gepostet hast, wird das, was du willst nicht gehen:</p>
<p>Das Problem ist, dass die <code>getContentMask</code> -Methode eine <code>const</code> -Referenz auf deine <code>ContentMask</code> zurückgibt, was bedeutet, dass sie sich über die erhaltene Referenz nicht verändern lässt. Die Methode <code>setHasList</code> verändert aber (dem Namen und der Fehlermeldung nach) die Instanz auf der sie arbeitet -&gt; Problem.</p>
<p>Du könntest gucken, ob es in der Klasse, deren Getter du verwendest noch andere Methoden gibt, die das können, was du möchtest.</p>
<p>Im schlimmsten Fall könntest du auf <code>const_cast</code> zurückgreifen, davor würde ich aber alle anderen Möglichkeiten ausschließen, weil das eher auf einen Designfehler hinweist (die Frage ist, ob der in deinem Code oder in der Klasse, die du verwenden musst liegt).</p>
<p>Felix</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1769639</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1769639</guid><dc:creator><![CDATA[Phoemuex]]></dc:creator><pubDate>Mon, 31 Aug 2009 09:28:28 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Referenz&#x2F;Zeiger on Mon, 31 Aug 2009 09:42:28 GMT]]></title><description><![CDATA[<p>Danke euch für die Antworten!<br />
Mir war schon soweit bewusst, dass es nicht geht. Aber es machte keinen Sinn für mich, da sich ein Objekt aus vielen kleinen Objekten zusammensetzt und diese sich zur Laufzeit ständig in ihrem Verhalten ändern können. Nun gut, das const_cast&lt;&gt; ist eine Übergangslösung.</p>
<p>Merci, Bernd</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1769644</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1769644</guid><dc:creator><![CDATA[Bernd88]]></dc:creator><pubDate>Mon, 31 Aug 2009 09:42:28 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Referenz&#x2F;Zeiger on Mon, 31 Aug 2009 10:58:04 GMT]]></title><description><![CDATA[<p>Hi 3 Bemerkungen von mir:</p>
<p>1.)</p>
<p>Bernd88 schrieb:</p>
<blockquote>
<p>...da sich ein Objekt aus vielen kleinen Objekten zusammensetzt und diese sich zur Laufzeit ständig in ihrem Verhalten ändern können....</p>
</blockquote>
<p>Dann ist das Objekt eben doch nicht konstant und die Schnittstelle stimmt nicht.</p>
<p>2.) Man kann Attribute <code>mutable</code> deklarieren. Das bedeutet dann &quot;Ich kümmere mich selbst um die fachliche Konstanz&quot;. Das kann aber (absolut zu Recht) nur der Programmierer der Klasse.</p>
<p>Bernd88 schrieb:</p>
<blockquote>
<p>..Ich habe folgenden getter gegeben, mit dem ich arbeiten muss und nicht modifizieren darf. ...</p>
</blockquote>
<p>3.) Ich sehe nicht, inwieweit ein const_cast&lt;&gt; &quot;erlaubter&quot; sein soll als eine Veränderung der Schnittstelle.<br />
Wenn man die Schnittstelle nicht verändern darf, dann entweder zu Übungszwecken oder weil Andere sich auf diese Schnittstelle verlassen - insbesonders die Implementierer von <code>getContentMask()</code> .</p>
<p>Insgesamt scheinst Du (absichtlich?mutwillig?) das Wesentliche der Antworten auszublenden:</p>
<p>Phoemuex schrieb:</p>
<blockquote>
<p>...<br />
<strong>Im schlimmsten Fall</strong> könntest du auf <code>const_cast</code> zurückgreifen, davor würde ich aber <strong>alle anderen Möglichkeiten ausschließen</strong>, ...</p>
</blockquote>
<p>Bashar schrieb:</p>
<blockquote>
<p>...<br />
Wenn du <strong>trotzdem unbedingt</strong> das const weghaben willst, kannst du es wegcasten:<br />
...<br />
Dann kann es aber gut sein, dass dir das <strong>Programm um die Ohren fliegt</strong> oder du wegen groben Unfugs die Kündigung bekommst.</p>
</blockquote>
<p>Schonmal überlegt, was passiert, wenn <code>getContentMask()</code> z.B. einen Zeiger auf ein Literal zurückgibt (ist ja OK, weil const&amp;)? Vielleicht sogar erst in der nächsten Version?</p>
<p>Letztlich steht es Dir natürlich frei, zu tun, was Du willst ... ich persönlich würde aber nicht nur Experten fragen, sondern mir auch ihre Antworten anhören.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1769677</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1769677</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 31 Aug 2009 10:58:04 GMT</pubDate></item></channel></rss>