<?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[Rückgabewert (Pointer) darf nicht geändert werden]]></title><description><![CDATA[<p>Hallo<br />
ich habe eine Klasse, die als private Membervariable einen Pointer besitzt (geht leider nicht anders). Nun soll diesem Pointer aber kein neuer Wert zugewiesen werden, wenn ich mit einem Getter diesen Pointer zurückgebe. Ansonsten soll man aber mit dem Pointer arbeiten können.<br />
Beispiel:</p>
<pre><code class="language-cpp">class Palette
{
private:
LPDIRECTDRAWPALETTE palette; //&lt;-- *IDirectDrawPalette
public:
LPDIRECTDRAWPALETTE GetPalette() const {return palette;} //&lt;-- oder muss man hier die Adresse zurückgeben?
};

//main
Palette pal();
//..
LPDIRECTDRAWPALETTE mypal;
LPDIRECTDRAWPALETTE mypal2;
mypal = pal.GetPalette();
mypal = mypal2;
</code></pre>
<p>Eine direkte Zuweisung von mypal an den Rückgabewert geht ja nicht, weil es kein L-Wert ist. Aber der Umweg über den zweiten Pointer sollte auch nicht möglich sein sprich die Membervariable darf nicht verändert werden können sonder nur über die Set Methode gesetzt werden können.<br />
Ich habe es schon mit const probiert aber klappt irgendwie auch nicht. Und wenn ich beim Getter die Adresse zurückgebe (keine Ahnung ob das richtig ist) bekomme ich ein paar Fehler wegen nicht möglicher Konvertierung vom Compiler.<br />
Ich muss aber trotzdem mit der struct, die hinter dem Pointer steckt arbeiten können...</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/181171/rückgabewert-pointer-darf-nicht-geändert-werden</link><generator>RSS for Node</generator><lastBuildDate>Tue, 22 Sep 2026 05:10:05 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/181171.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 10 May 2007 17:15:14 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Rückgabewert (Pointer) darf nicht geändert werden on Thu, 10 May 2007 17:15:14 GMT]]></title><description><![CDATA[<p>Hallo<br />
ich habe eine Klasse, die als private Membervariable einen Pointer besitzt (geht leider nicht anders). Nun soll diesem Pointer aber kein neuer Wert zugewiesen werden, wenn ich mit einem Getter diesen Pointer zurückgebe. Ansonsten soll man aber mit dem Pointer arbeiten können.<br />
Beispiel:</p>
<pre><code class="language-cpp">class Palette
{
private:
LPDIRECTDRAWPALETTE palette; //&lt;-- *IDirectDrawPalette
public:
LPDIRECTDRAWPALETTE GetPalette() const {return palette;} //&lt;-- oder muss man hier die Adresse zurückgeben?
};

//main
Palette pal();
//..
LPDIRECTDRAWPALETTE mypal;
LPDIRECTDRAWPALETTE mypal2;
mypal = pal.GetPalette();
mypal = mypal2;
</code></pre>
<p>Eine direkte Zuweisung von mypal an den Rückgabewert geht ja nicht, weil es kein L-Wert ist. Aber der Umweg über den zweiten Pointer sollte auch nicht möglich sein sprich die Membervariable darf nicht verändert werden können sonder nur über die Set Methode gesetzt werden können.<br />
Ich habe es schon mit const probiert aber klappt irgendwie auch nicht. Und wenn ich beim Getter die Adresse zurückgebe (keine Ahnung ob das richtig ist) bekomme ich ein paar Fehler wegen nicht möglicher Konvertierung vom Compiler.<br />
Ich muss aber trotzdem mit der struct, die hinter dem Pointer steckt arbeiten können...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1282537</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1282537</guid><dc:creator><![CDATA[Amateur]]></dc:creator><pubDate>Thu, 10 May 2007 17:15:14 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgabewert (Pointer) darf nicht geändert werden on Thu, 10 May 2007 17:19:00 GMT]]></title><description><![CDATA[<p>Die Membervariable (der Zeiger) kann sowieso nicht geändert werden, es sei denn du würdest sie als Referenz (LPDIRECTDRAWPALETTE&amp;) zurückgeben. Die Zuweisung irgendwelcher Pointer, wie in deinem Beispiel, kannst du nicht verhindern, die können dir aber auch egal sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1282539</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1282539</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Thu, 10 May 2007 17:19:00 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgabewert (Pointer) darf nicht geändert werden on Thu, 10 May 2007 17:29:35 GMT]]></title><description><![CDATA[<p>Hmm das ist natürlich blöd. Denn dann bräuchte man die Set-Methode ja theoretisch nicht mehr. Und aus dem Pointer eine normale Variable machen kann ich glaub ich auch nicht bzw. dann müsste ich in meinen Methoden wieder Zeiger darauf erstellen denke ich, da DirectX immer mit Zeigern arbeitet...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1282546</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1282546</guid><dc:creator><![CDATA[Amateur]]></dc:creator><pubDate>Thu, 10 May 2007 17:29:35 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgabewert (Pointer) darf nicht geändert werden on Thu, 10 May 2007 18:02:43 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Nochmal : Das ist schon richtig so. Du kannst zwar mypal etwas zuweisen, aber diese Zuweisung setzt sich nicht in den Member Palette::palette fort. Wenn LPDIRECTDRAWPALETTE allerdings selber wieder Member hat, können die aufgerufen werden und haben einen Effekt auf die Instanz in Palette::palette. Das kannst du verhindern indem du die Const Correctness einhälst, also</p>
<pre><code class="language-cpp">const LPDIRECTDRAWPALETTE GetPalette() const {return palette;}
LPDIRECTDRAWPALETTE GetPalette() {return palette;}
</code></pre>
<p>Nun kann die Instanz hinter palette nur von außen verändert werden wenn auch die besitzende Instanz von Palette nicht const ist.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1282569</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1282569</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Thu, 10 May 2007 18:02:43 GMT</pubDate></item></channel></rss>