<?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[const variablen verändern]]></title><description><![CDATA[<p>hallo leute</p>
<p>ich schreibe hier gerade eine klasse die 2 const member hat</p>
<p>bei dem einen konstruktor werden diese beiden als parameter direkt übergeben und dann per initialisierungs liste gesetzt</p>
<p>bei dem anderen Ctor allerdings werden diese beiden werte erst aus einer datei gelesen...</p>
<p>problem also: VC++ meckert dass man die beiden const member nicht per initliste initialisiert und danach kann ich sie ja nicht mehr ändern</p>
<p>mein ansatz:<br />
entweder per schmutzigem trick das const ind em fall umgehen<br />
oder (aber ich glaube nicht dass es klappt) man erzeugt ein temporäres objekt dieser klasse mit den ausgelesenen werten und belegt das eigendliche objekt mit dem temp objekt<br />
da wäre noch zu zusagen dass es keinen copy Ctor und keine zuweisungsoperator gibt weil es für das anwendungs gebiet etwas schwachsinnig ist <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>was kann ich machen?<br />
und wie?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/227588/const-variablen-verändern</link><generator>RSS for Node</generator><lastBuildDate>Tue, 29 Sep 2026 21:55:18 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/227588.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 17 Nov 2008 14:15:57 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to const variablen verändern on Mon, 17 Nov 2008 14:15:57 GMT]]></title><description><![CDATA[<p>hallo leute</p>
<p>ich schreibe hier gerade eine klasse die 2 const member hat</p>
<p>bei dem einen konstruktor werden diese beiden als parameter direkt übergeben und dann per initialisierungs liste gesetzt</p>
<p>bei dem anderen Ctor allerdings werden diese beiden werte erst aus einer datei gelesen...</p>
<p>problem also: VC++ meckert dass man die beiden const member nicht per initliste initialisiert und danach kann ich sie ja nicht mehr ändern</p>
<p>mein ansatz:<br />
entweder per schmutzigem trick das const ind em fall umgehen<br />
oder (aber ich glaube nicht dass es klappt) man erzeugt ein temporäres objekt dieser klasse mit den ausgelesenen werten und belegt das eigendliche objekt mit dem temp objekt<br />
da wäre noch zu zusagen dass es keinen copy Ctor und keine zuweisungsoperator gibt weil es für das anwendungs gebiet etwas schwachsinnig ist <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>was kann ich machen?<br />
und wie?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1615984</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1615984</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Mon, 17 Nov 2008 14:15:57 GMT</pubDate></item><item><title><![CDATA[Reply to const variablen verändern on Mon, 17 Nov 2008 14:22:26 GMT]]></title><description><![CDATA[<p>Warum nicht einfach const in die Tonne treten und den Zugriff von außerhalb durch einen Getter kapseln?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1615987</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1615987</guid><dc:creator><![CDATA[mr. phahl]]></dc:creator><pubDate>Mon, 17 Nov 2008 14:22:26 GMT</pubDate></item><item><title><![CDATA[Reply to const variablen verändern on Mon, 17 Nov 2008 14:22:52 GMT]]></title><description><![CDATA[<p>na ja mit &quot;schmutzigen Tricks&quot; geht das schon, aber eigentlich ist eine Konstante dazu da, dass sie eben nicht geändert wird, daher frage ich mich, ob du nicht irgendwo nen Designfehler hast ;).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1615988</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1615988</guid><dc:creator><![CDATA[Paul Manns]]></dc:creator><pubDate>Mon, 17 Nov 2008 14:22:52 GMT</pubDate></item><item><title><![CDATA[Reply to const variablen verändern on Mon, 17 Nov 2008 15:38:12 GMT]]></title><description><![CDATA[<p>Hmmmm, kann man nicht Konstanten über Rückgabewerte von Funktionen initialisieren ?<br />
Dann bräuchte es bloß eine entsprechende Funktion, die die Werte aus einer Datei einliest (sollte natürlich keine virtuelle Funktion der Klasse selbst sein, weil die zur Konstruktionszeit noch nicht definiert ist)...</p>
<p>Oder täusche ich mich da?</p>
<p>Nachtrag: Also bei mir (xlC V5) läuft das hier</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;

using namespace std;

string get(string const&amp; s) {
   ifstream in(s.c_str());
   string ret;
   in &gt;&gt; ret;
   return ret;
}

struct A {
   string const s;
   A() : s(&quot;default&quot;) {}
   A(string const&amp; in)  : s(get(in)) {}
};

int main() {
   A a1;
   A a2(&quot;main.cpp&quot;);
   cout &lt;&lt; &quot;a1: &quot; &lt;&lt; a1.s &lt;&lt; &quot;\n&quot;;
   cout &lt;&lt; &quot;a2: &quot; &lt;&lt; a2.s &lt;&lt; &quot;\n&quot;;
   return 0;
}
</code></pre>
<p>...und ich wüsste auch nicht, was dagegen spräche - weder sprach- noch designtechnisch.<br />
Dass &quot;const&quot; nur für die Lebenszeit von Objekten gilt, ist ja nicht neu ... sonst wären ja auch const-Funktionsparameter (oder const lokale Variablen) nicht erlaubt.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1616037</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1616037</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 17 Nov 2008 15:38:12 GMT</pubDate></item><item><title><![CDATA[Reply to const variablen verändern on Mon, 17 Nov 2008 16:27:40 GMT]]></title><description><![CDATA[<p>Ich versteh jetzt nicht wieso du das const nicht einfach weglassen kannst. Wenn du es nunmal dringend ändern willst dann mach es auch änderbar. Andernfalls mach die Variable private und stell nur eine Getter Methode zur Verfügung. Das sollte doch auch reichen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1616067</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1616067</guid><dc:creator><![CDATA[Ganz ehrlich]]></dc:creator><pubDate>Mon, 17 Nov 2008 16:27:40 GMT</pubDate></item><item><title><![CDATA[Reply to const variablen verändern on Mon, 17 Nov 2008 16:31:24 GMT]]></title><description><![CDATA[<p>Er will die const variable ja gar nicht ändern nur auf zwei unterschiedliche Arten initialisieren.<br />
Also ist die Lösung von Simon2 angenommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1616071</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1616071</guid><dc:creator><![CDATA[templäd]]></dc:creator><pubDate>Mon, 17 Nov 2008 16:31:24 GMT</pubDate></item><item><title><![CDATA[Reply to const variablen verändern on Mon, 17 Nov 2008 16:40:23 GMT]]></title><description><![CDATA[<p>ok cool danke</p>
<p>klappt so</p>
<p>mh hätte ich eigendlich selbst drauf kommen können -.-</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1616074</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1616074</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Mon, 17 Nov 2008 16:40:23 GMT</pubDate></item><item><title><![CDATA[Reply to const variablen verändern on Mon, 17 Nov 2008 16:58:57 GMT]]></title><description><![CDATA[<p>Wenn ich noch was dazufügen darf. Das Problem kommt meiner Meinung nach vor allem von einem Design-/Denkfehler. Ist es denn die Aufgabe dieser Klasse, dass sie ein File öffnen und interpretieren soll? Ich denke eher nicht.<br />
Korrekt wäre somit, dass du eine freie Funktion oder eine &quot;Reader&quot;-Klasse schreibst, welche die Datei einliesst und dann ein entsprechendes Objekt erstellt. Dem Konstruktor also gleich den Wert übergibt, welcher in der Initialisierungsliste gesetzt werden muss.</p>
<p>Also grundsätzlich macht dein Konstruktor Dinge, welcher er gar nicht tun sollte, bzw. nicht in seinen Aufgabenbereich gehört.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1616083</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1616083</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Mon, 17 Nov 2008 16:58:57 GMT</pubDate></item><item><title><![CDATA[Reply to const variablen verändern on Mon, 17 Nov 2008 17:12:33 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>...Das Problem kommt meiner Meinung nach vor allem von einem Design-/Denkfehler. ...</p>
</blockquote>
<p>Naja ... so ganz pauschal würde ich das nicht sehen. Es kann IMHO durchaus in Ordnung sein (designtechnisch), wenn const-Member auch über komplexere Wege initialisiert werden können als einfache Wertübergabe per Ctor ... und auch, wenn diese Wege, die scheitern können.<br />
Das bedeutet aber nicht, dass diese Aufgabe automatisch die komplette &quot;Erzeugungsverantwortung&quot; für die Fachklasse haben muss.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1616085</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1616085</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 17 Nov 2008 17:12:33 GMT</pubDate></item><item><title><![CDATA[Reply to const variablen verändern on Mon, 17 Nov 2008 18:09:43 GMT]]></title><description><![CDATA[<p>falls es euch interessiert</p>
<p>ich schreibe ein snake spiel (bzw es ist eig soweit fertig) und einmal soll man die grösse per Ctor angeben können um in einem rechteck ohne alles spielen zu können</p>
<p>und einmal soll man einen dateinamen angeben können. in dieser datei sind dann levelkoordinaten gespeichert</p>
<p>das snake spiel ist in einer klasse (weswegen ein copy Ctor und ein zuweiser blöd sind) und die breite und höhe ist als const unsigned int angegeben und die sollen halt aus der datei gelesen werden</p>
<p>so wie simon2 es erklärt hat klappts auch gut</p>
<p>ok ich muss zugeben es ist nicht gut designt aber das ist meine rstes spiel und mein erstes richtig projekt mit klassen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1616105</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1616105</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Mon, 17 Nov 2008 18:09:43 GMT</pubDate></item><item><title><![CDATA[Reply to const variablen verändern on Mon, 17 Nov 2008 18:57:57 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13624">@Simon2</a>,<br />
Sobald die Klasse komplexere Wege gehen muss, welche durch Regionen führen, welche sie nicht betrifft, dann gehört sowas ausgelagert. Der Konstruktor soll nur die eigenen Variablen initialisiseren. Die komplexen Wege sollten vorher getätigt werden.<br />
Ich denke das darf man durchaus so pauschal sagen, wie auch beim <code>dynamic_cast</code> . Kann sein, dass es Ausnahmen gibt, aber meistens ist das schon korrekt. Und meiner Meinung nach, ist es erst recht hier der Fall.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/18806">@Skym0sh0</a>,<br />
Vielleicht nur zwei Dinge (von womöglich vielen :)):<br />
1. Ich würde ein LevelLoader oder sowas ausserhalb der Klasse schreiben. Sowas gehört meiner Meinung nach ausgelagert.<br />
2. Es ist fraglich, ob diese Grössen wirklich <code>const</code> sein sollten. Man sollte es mit const auch nicht übertreiben <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="😉"
    /><br />
Kann es wirklich nicht sein, dass sich diese Grössen verändern? Wäre doch durchaus möglich, vielleicht sogar als Spielfeature <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>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1616122</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1616122</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Mon, 17 Nov 2008 18:57:57 GMT</pubDate></item><item><title><![CDATA[Reply to const variablen verändern on Tue, 18 Nov 2008 07:49:43 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13624">@Simon2</a>,<br />
Sobald die Klasse komplexere Wege gehen muss, welche durch Regionen führen, welche sie nicht betrifft, dann gehört sowas ausgelagert. Der Konstruktor soll nur die eigenen Variablen initialisiseren. Die komplexen Wege sollten vorher getätigt werden.<br />
Ich denke das darf man durchaus so pauschal sagen, wie auch beim <code>dynamic_cast</code> . ...</p>
</blockquote>
<p>Gerne.<br />
Ich war ja auch nicht gegen das Auslagern (mache ich in meinem Beispiel ja auch), sondern nur gegen die &quot;Erzeugungsverantwortung&quot;.<br />
In diesem Fall, bei dem es letztlich nur um eine Datenquelle handelt, reicht IMHO die lockere Kopplung (get() hat einen eigentständigen Sinn und ist nicht nur zur Erzeugung von A da) vollkommen aus.<br />
Sobald die &quot;äußere&quot; Funktionalität aber noch für die Lebenszeit des Objekts Relevanz hat (z.B. wenn in unserem Beispiel eine Änderung in der Datei auch den Zustand eines erzeugten A-Objektes bewirken soll), fände ich eine engere Kopplung auch besser. ... aber als reine Datenquelle geht das schon in Ordnung.</p>
<p>Leicht OT: Ich denke, es gibt hier 2 (gleich korrekte) Vorstellungen von &quot;pauschal&quot;:<br />
a) Die Aussage trifft in den meisten/wesentlichen Fällen zu. Der Rest sind &quot;Die Regel bestätigende Ausnahmen&quot;.<br />
b) Die Aussage trifft genau IMMER zu.<br />
Vermutlich meintest Du eher &quot;pauschal-a)&quot; während ich &quot;pauschal-b)&quot; meinte. <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>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1616265</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1616265</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 18 Nov 2008 07:49:43 GMT</pubDate></item></channel></rss>