<?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[New? Nicht new?]]></title><description><![CDATA[<p>Folgendes Problem:</p>
<p>Ich habe die Klasse GameItem.</p>
<p>GameItem-Klasse:</p>
<pre><code class="language-cpp">class GameItem
{
private:
	RECT srcRect;
	vector&lt;string&gt; actions;
	string name;
public:
	bool useOnce;
	void SetName(string name) { this-&gt;name = name; }
	string GetName() { return name; }
	void SetSrcRect(RECT r) { this-&gt;srcRect = r; }
	RECT GetSrcRect() { return this-&gt;srcRect; }
	void Use(ScriptHandler* sh);
	void AddAction(string action) { this-&gt;actions.push_back(action); }
	vector&lt;string&gt; GetActions() { return this-&gt;actions; }
	void SetActions(vector&lt;string&gt; actions) { this-&gt;actions = actions; }
	bool GetUseOnce() { return useOnce; }
	void SetUseOnce(bool b) { useOnce = b; }
};
</code></pre>
<p>Die Daten dafür werden aus einem File gelesen.<br />
Vor dem Lesen habe ich ein simples, temporäres GameItem:</p>
<pre><code class="language-cpp">GameItem tmpItem;
</code></pre>
<p>*plop*</p>
<p>So, nun setze ich dessen Attribute und pack's in einen vector.<br />
Alles wunderbar. Nun musste ich aber der GameItem-Klasse noch<br />
einen bool &quot;useOnce&quot; hinzufügen. Dieser bool wird aber nicht richtig<br />
gesetzt, daher habe ich das mal mit &quot;tmpItem.useOnce = false;&quot; getestet.<br />
Und siehe da, noch bevor die nächste Zeile ausgeführt wird,<br />
ist useOnce dennoch wieder auf true.</p>
<p>Wenn ich GameItem nun mit Pointer und new mache, funktioniert das Ganze<br />
wunderbar. Möcht ich aber nicht wirklich. ;P<br />
Also... Da so ähnliche new/nicht new-Probleme schon öfters bei mir aufgetaucht<br />
sind, wollte ich fragen:</p>
<p>Was zum heiligen Dreizackenfleisch habe ich da in den Grundlagen übersehen?<br />
Was macht new mit meinem bool? Wieso funktionierts damit und ohne<br />
new nicht? Vorher hat's auch ohne new wunderbar mit allem funktioniert.<br />
Nur &quot;useOnce&quot; will nicht wirklich.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/218552/new-nicht-new</link><generator>RSS for Node</generator><lastBuildDate>Fri, 09 Oct 2026 01:41:11 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/218552.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 22 Jul 2008 10:22:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to New? Nicht new? on Tue, 22 Jul 2008 10:23:27 GMT]]></title><description><![CDATA[<p>Folgendes Problem:</p>
<p>Ich habe die Klasse GameItem.</p>
<p>GameItem-Klasse:</p>
<pre><code class="language-cpp">class GameItem
{
private:
	RECT srcRect;
	vector&lt;string&gt; actions;
	string name;
public:
	bool useOnce;
	void SetName(string name) { this-&gt;name = name; }
	string GetName() { return name; }
	void SetSrcRect(RECT r) { this-&gt;srcRect = r; }
	RECT GetSrcRect() { return this-&gt;srcRect; }
	void Use(ScriptHandler* sh);
	void AddAction(string action) { this-&gt;actions.push_back(action); }
	vector&lt;string&gt; GetActions() { return this-&gt;actions; }
	void SetActions(vector&lt;string&gt; actions) { this-&gt;actions = actions; }
	bool GetUseOnce() { return useOnce; }
	void SetUseOnce(bool b) { useOnce = b; }
};
</code></pre>
<p>Die Daten dafür werden aus einem File gelesen.<br />
Vor dem Lesen habe ich ein simples, temporäres GameItem:</p>
<pre><code class="language-cpp">GameItem tmpItem;
</code></pre>
<p>*plop*</p>
<p>So, nun setze ich dessen Attribute und pack's in einen vector.<br />
Alles wunderbar. Nun musste ich aber der GameItem-Klasse noch<br />
einen bool &quot;useOnce&quot; hinzufügen. Dieser bool wird aber nicht richtig<br />
gesetzt, daher habe ich das mal mit &quot;tmpItem.useOnce = false;&quot; getestet.<br />
Und siehe da, noch bevor die nächste Zeile ausgeführt wird,<br />
ist useOnce dennoch wieder auf true.</p>
<p>Wenn ich GameItem nun mit Pointer und new mache, funktioniert das Ganze<br />
wunderbar. Möcht ich aber nicht wirklich. ;P<br />
Also... Da so ähnliche new/nicht new-Probleme schon öfters bei mir aufgetaucht<br />
sind, wollte ich fragen:</p>
<p>Was zum heiligen Dreizackenfleisch habe ich da in den Grundlagen übersehen?<br />
Was macht new mit meinem bool? Wieso funktionierts damit und ohne<br />
new nicht? Vorher hat's auch ohne new wunderbar mit allem funktioniert.<br />
Nur &quot;useOnce&quot; will nicht wirklich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1551506</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1551506</guid><dc:creator><![CDATA[Asmodiel]]></dc:creator><pubDate>Tue, 22 Jul 2008 10:23:27 GMT</pubDate></item><item><title><![CDATA[Reply to New? Nicht new? on Tue, 22 Jul 2008 10:30:04 GMT]]></title><description><![CDATA[<p>Es ist wahrscheinlich, dass du irgendwo eine &quot;unsichere&quot; Aktion ausführst, zum Beispiel mit Zeigern in falschen Bereich schreibst oder Arraygrenzen überschreitest. Dass die Bool-Variable auf dem Stack nicht funktioniert, aber auf dem Heap schon, könnte daran liegen, dass sie auf dem Heap eine andere Adresse erhält und dann zufälligerweise nicht betroffen ist. Das impliziert auch, dass dein Problem nicht verschwunden ist, wenn du dynamischen Speicher allozierst, sondern nur nicht mehr sichtbar - vielleicht passiert dann an einem anderen Ort etwas Undefiniertes.</p>
<p>Schau auf jeden Fall mit einem Debugger, was zwischen der Zuweisung der Bool-Variable und dem Code ein paar Zeilen weiter passiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1551509</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1551509</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 22 Jul 2008 10:30:04 GMT</pubDate></item><item><title><![CDATA[Reply to New? Nicht new? on Tue, 22 Jul 2008 10:37:47 GMT]]></title><description><![CDATA[<p>Herzlichen Dank für die schnelle Antwort.<br />
So etwas dürfte es eigentlich nicht geben... Aber<br />
ich werde mal genau nachschauen.</p>
<p>Das Seltsame ist:</p>
<pre><code class="language-cpp">tmpItem.useOnce = false;

// Erste action oder End-Tag lesen
getline(iStr, tmpStr);
</code></pre>
<p>Nach dem Setzen auf false ist sie direkt wieder true.<br />
Bereits bei getline.</p>
<p>Sollte es so sein, wie Du sagst, habe ich ein grösseres Problem.<br />
Die Ursache bei sowas zu finden wäre... naja, ich hätte nicht wirklich<br />
eine Ahnung...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1551512</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1551512</guid><dc:creator><![CDATA[Asmodiel]]></dc:creator><pubDate>Tue, 22 Jul 2008 10:37:47 GMT</pubDate></item><item><title><![CDATA[Reply to New? Nicht new? on Tue, 22 Jul 2008 10:42:36 GMT]]></title><description><![CDATA[<p>Asmodiel schrieb:</p>
<blockquote>
<p>Sollte es so sein, wie Du sagst, habe ich ein grösseres Problem.<br />
Die Ursache bei sowas zu finden wäre... naja, ich hätte nicht wirklich<br />
eine Ahnung...</p>
</blockquote>
<p>Ja, solche Fehler sind meistens am schwierigsten zu finden. Da muss man meistens ein bisschen ausprobieren, einige Anweisungen weglassen, etc. Geh mit dem Debugger trotzdem schrittweise durch (in möglichst kleinen Schritten) und fange direkt bei der Zuweisung an (z.B. durch einen Haltepunkt). Dann wirst du sehen, wo genau der Fehler passiert.</p>
<p>Du arbeitest nicht mit mehreren Threads, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1551517</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1551517</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 22 Jul 2008 10:42:36 GMT</pubDate></item><item><title><![CDATA[Reply to New? Nicht new? on Tue, 22 Jul 2008 10:53:12 GMT]]></title><description><![CDATA[<p>Ok. *debug*<br />
Gut, was Seltsames.</p>
<p>Ergebnis (ohne new):<br />
Release:<br />
Schon zu Beginn ist useOnce true. Wird im Konstruktor auf false gesetzt.<br />
(string und vector werden ebenfalls initialisiert.)<br />
Ist danach aber noch immer true.</p>
<p>Debug:<br />
useOnce wird auf false gesetzt. Kann dann auch verändert werden.<br />
Funktioniert einwandfrei.</p>
<p>Release vs. Debug?<br />
Was zum....</p>
<p>Nein, verwende nur einen Thread.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1551529</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1551529</guid><dc:creator><![CDATA[Asmodiel]]></dc:creator><pubDate>Tue, 22 Jul 2008 10:53:12 GMT</pubDate></item><item><title><![CDATA[Reply to New? Nicht new? on Tue, 22 Jul 2008 11:22:33 GMT]]></title><description><![CDATA[<p>Asmodiel schrieb:</p>
<blockquote>
<p>Release vs. Debug?<br />
Was zum....</p>
</blockquote>
<p>Der Debug-Modus ist generell vorsichtiger, beispielsweise werden Variablen mit 0 initialisiert. Im Forum gibts auch Beiträge dazu, möglicherweise liegt der Fehler da...</p>
<p>Asmodiel schrieb:</p>
<blockquote>
<p>Schon zu Beginn ist useOnce true. Wird im Konstruktor auf false gesetzt.<br />
(string und vector werden ebenfalls initialisiert.)<br />
Ist danach aber noch immer true.</p>
</blockquote>
<p>Wann danach? Im Konstruktorrumpf? Oder erst nach der Konstruktion?<br />
Benutz doch die Konstruktor-Initialisiererliste für solche Dinge.</p>
<p>Und bist du den Code jetzt in ganz kleinen Schritten durchgegangen, sodass du <em>genau</em> feststellen kannst, wo sich der Wert ungewollt ändert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1551558</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1551558</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 22 Jul 2008 11:22:33 GMT</pubDate></item><item><title><![CDATA[Reply to New? Nicht new? on Tue, 22 Jul 2008 11:27:23 GMT]]></title><description><![CDATA[<p>erm... im Release Modus fehlen die Debug-Informationen, die im Debug Modus mit rein kompiliert werden...<br />
das heißt, es kann auch sein, dass im Debugger beim ausführen der Release-Version auch 42 in deiner boolschen Variable stehen kann.<br />
Macht aber nix, weil dus vermutlich nicht siehst, oder eventuell was falsches siehst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1551564</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1551564</guid><dc:creator><![CDATA[Vorden]]></dc:creator><pubDate>Tue, 22 Jul 2008 11:27:23 GMT</pubDate></item><item><title><![CDATA[Reply to New? Nicht new? on Tue, 22 Jul 2008 11:30:22 GMT]]></title><description><![CDATA[<p>Es lag wirklich daran, dass im Release<br />
nicht der wirkliche Wert drin stand.<br />
Ich habe vergessen, den Wert beim Kopieren<br />
zu setzen.</p>
<p>Und da beim Debuggen in der Release-Version nicht<br />
der wirkliche Wert angezeigt wurde, dachte ich, ich könne<br />
den Wert gar nicht erst verändern.</p>
<p>Vielen Dank für die Hilfe, und Verzeihung wegen der Zeitverschwendung.<br />
Dennoch konnte ich einiges lernen, also herzlichen Dank für die Beiträge.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1551569</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1551569</guid><dc:creator><![CDATA[Asmodiel]]></dc:creator><pubDate>Tue, 22 Jul 2008 11:30:22 GMT</pubDate></item><item><title><![CDATA[Reply to New? Nicht new? on Tue, 22 Jul 2008 11:33:28 GMT]]></title><description><![CDATA[<p>Asmodiel schrieb:</p>
<blockquote>
<p>Vielen Dank für die Hilfe, und Verzeihung wegen der Zeitverschwendung.</p>
</blockquote>
<p>Kein Problem, solche Dinge treten bei mir die ganze Zeit auf <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/1551573</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1551573</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 22 Jul 2008 11:33:28 GMT</pubDate></item></channel></rss>