<?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[2 Elemente in Pointer-Array behalten nicht ihren Wert]]></title><description><![CDATA[<p>Hallo Welt <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 />
Ich versuche mich gerade an einem winzigen 8-bit-mäßigem Game in C++.<br />
Ist alles sehr trivial und basiert auf einfachen Funktionen der WinAPI.<br />
Allerdings habe ich ein Problem mit dem &quot;Level Generator&quot;.</p>
<p>Um kurz zu zeigen, was passieren soll, hier ein kleiner Screenshot, wie das ganze aussieht:<br />
<a href="http://i.imgur.com/Hf6bH.jpg" rel="nofollow">http://i.imgur.com/Hf6bH.jpg</a><br />
(später kommt dann ein Punkt hinzu, den man durch die zufällig generierten Balken durchsteuern muss)<br />
Das Problem ist beim Generieren der Balken. Die werden in einem int-array gecacht (die y-Position von oben). Das funktioniert alles so weit, nur die ersten zwei haben komplett andere Werte, so als würde ich auf eine uninitialisierte Variable zugreifen.</p>
<p>Der relevante Code ist hier (Balken habe ich im Code &quot;pipes&quot; genannt):</p>
<p>WorldProvider.h:</p>
<pre><code class="language-cpp">class WorldProvider {
private:
	int* heightMap;
        // ...
public:
	static const int pipeWidth = 30;
	static const int pipeHeight = 300;
	WorldProvider(int displayWidth, int displayHeight);
	~WorldProvider();
	void getPipeBounds(int i, RECT&amp; rect);
};
</code></pre>
<p>WorldProvider.cpp:</p>
<pre><code class="language-cpp">WorldProvider::WorldProvider(int displayWidth, int displayHeight) {
        // ...
	// int variable, die nicht so wichtig ist
	visiblePipes = ceil(displayWidth/pipeWidth);

	heightMap = new int[visiblePipes];
	for(int i=0; i&lt;visiblePipes; i++){
		heightMap[i] = -1;
	}
        // ...
}

WorldProvider::~WorldProvider(){
	delete[] heightMap;
}

void WorldProvider::getPipeBounds(int i, RECT&amp; rect) {
	if(i &gt;= visiblePipes)
		return;

        // Wenn Standardwert -&gt; zufälligen Wert setzen
	if(heightMap[i] == -1){
		cout &lt;&lt; &quot;Setting pipe &quot; &lt;&lt; i &lt;&lt; endl;
		heightMap[i] = rand() % (displayHeight-pipeHeight);
	}

        // das übergebene RECT mit den Werten füllen
	int offset = heightMap[i];
	rect.left = i*pipeWidth;
	rect.right = rect.left + pipeWidth;
	rect.top = offset;
	rect.bottom = rect.top + pipeHeight;

}
</code></pre>
<p>Kurze Erläuterung:<br />
Im Konstruktor erstelle ich das array und fülle es mit dem default-Wert -1.<br />
Später, wenn beim Zeichnen des Bildschirms nach den Abmessungen gefragt wird (getPipeBounds) und der Wert des Balkens noch -1 ist, wird er mit einem Zufallswert belegt (und eine Debug-message ausgegeben).</p>
<p>Das Problem ist jetzt nur generell, dass bei jedem Programmstart immer die Werte von heightMap[0] und heightMap[1] in getPipeBounds irgendwelche sind, und nicht -1, dadurch werden sie auch nicht gefüllt und der Balken nicht angezeigt (wie im Screenshot zu sehen).</p>
<p>Wenn ich mir die Werte mit cout ausgeben lasse, sind sie nach dem initialisieren im Konstruktor wie erwartet -1, aber in getPipeBounds eben jene unerwarteten Werte.<br />
Ich kann mir das beim besten Willen nicht erklären, da nirgends sonst auf die Variable zugegriffen wird (ist ja auch private), und ich sie eigentlich (meines Wissens) konform zugewiesen habe.</p>
<p>Ich hoffe, irgendwer hat eine Idee. Danke schon mal <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>lg<br />
Bone</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/294751/2-elemente-in-pointer-array-behalten-nicht-ihren-wert</link><generator>RSS for Node</generator><lastBuildDate>Sat, 15 Aug 2026 19:11:18 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/294751.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 31 Oct 2011 21:07:36 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to 2 Elemente in Pointer-Array behalten nicht ihren Wert on Mon, 31 Oct 2011 21:07:36 GMT]]></title><description><![CDATA[<p>Hallo Welt <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 />
Ich versuche mich gerade an einem winzigen 8-bit-mäßigem Game in C++.<br />
Ist alles sehr trivial und basiert auf einfachen Funktionen der WinAPI.<br />
Allerdings habe ich ein Problem mit dem &quot;Level Generator&quot;.</p>
<p>Um kurz zu zeigen, was passieren soll, hier ein kleiner Screenshot, wie das ganze aussieht:<br />
<a href="http://i.imgur.com/Hf6bH.jpg" rel="nofollow">http://i.imgur.com/Hf6bH.jpg</a><br />
(später kommt dann ein Punkt hinzu, den man durch die zufällig generierten Balken durchsteuern muss)<br />
Das Problem ist beim Generieren der Balken. Die werden in einem int-array gecacht (die y-Position von oben). Das funktioniert alles so weit, nur die ersten zwei haben komplett andere Werte, so als würde ich auf eine uninitialisierte Variable zugreifen.</p>
<p>Der relevante Code ist hier (Balken habe ich im Code &quot;pipes&quot; genannt):</p>
<p>WorldProvider.h:</p>
<pre><code class="language-cpp">class WorldProvider {
private:
	int* heightMap;
        // ...
public:
	static const int pipeWidth = 30;
	static const int pipeHeight = 300;
	WorldProvider(int displayWidth, int displayHeight);
	~WorldProvider();
	void getPipeBounds(int i, RECT&amp; rect);
};
</code></pre>
<p>WorldProvider.cpp:</p>
<pre><code class="language-cpp">WorldProvider::WorldProvider(int displayWidth, int displayHeight) {
        // ...
	// int variable, die nicht so wichtig ist
	visiblePipes = ceil(displayWidth/pipeWidth);

	heightMap = new int[visiblePipes];
	for(int i=0; i&lt;visiblePipes; i++){
		heightMap[i] = -1;
	}
        // ...
}

WorldProvider::~WorldProvider(){
	delete[] heightMap;
}

void WorldProvider::getPipeBounds(int i, RECT&amp; rect) {
	if(i &gt;= visiblePipes)
		return;

        // Wenn Standardwert -&gt; zufälligen Wert setzen
	if(heightMap[i] == -1){
		cout &lt;&lt; &quot;Setting pipe &quot; &lt;&lt; i &lt;&lt; endl;
		heightMap[i] = rand() % (displayHeight-pipeHeight);
	}

        // das übergebene RECT mit den Werten füllen
	int offset = heightMap[i];
	rect.left = i*pipeWidth;
	rect.right = rect.left + pipeWidth;
	rect.top = offset;
	rect.bottom = rect.top + pipeHeight;

}
</code></pre>
<p>Kurze Erläuterung:<br />
Im Konstruktor erstelle ich das array und fülle es mit dem default-Wert -1.<br />
Später, wenn beim Zeichnen des Bildschirms nach den Abmessungen gefragt wird (getPipeBounds) und der Wert des Balkens noch -1 ist, wird er mit einem Zufallswert belegt (und eine Debug-message ausgegeben).</p>
<p>Das Problem ist jetzt nur generell, dass bei jedem Programmstart immer die Werte von heightMap[0] und heightMap[1] in getPipeBounds irgendwelche sind, und nicht -1, dadurch werden sie auch nicht gefüllt und der Balken nicht angezeigt (wie im Screenshot zu sehen).</p>
<p>Wenn ich mir die Werte mit cout ausgeben lasse, sind sie nach dem initialisieren im Konstruktor wie erwartet -1, aber in getPipeBounds eben jene unerwarteten Werte.<br />
Ich kann mir das beim besten Willen nicht erklären, da nirgends sonst auf die Variable zugegriffen wird (ist ja auch private), und ich sie eigentlich (meines Wissens) konform zugewiesen habe.</p>
<p>Ich hoffe, irgendwer hat eine Idee. Danke schon mal <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>lg<br />
Bone</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2138444</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2138444</guid><dc:creator><![CDATA[Bone008]]></dc:creator><pubDate>Mon, 31 Oct 2011 21:07:36 GMT</pubDate></item><item><title><![CDATA[Reply to 2 Elemente in Pointer-Array behalten nicht ihren Wert on Mon, 31 Oct 2011 21:34:10 GMT]]></title><description><![CDATA[<p>Sind die Werte gleich am Anfang der getPipeBounds()-Methode &quot;korrupt&quot;? Überprüfe es mit dem Debugger. Wie sehen die Daten vor der ersten if-Abfrage und danach aus?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2138453</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2138453</guid><dc:creator><![CDATA[*Rewind*]]></dc:creator><pubDate>Mon, 31 Oct 2011 21:34:10 GMT</pubDate></item><item><title><![CDATA[Reply to 2 Elemente in Pointer-Array behalten nicht ihren Wert on Mon, 31 Oct 2011 21:43:19 GMT]]></title><description><![CDATA[<p>Anscheinend sind sie es. Ich kann nicht wirklich gut mit dem Debugger umgehen (ich benutze Eclipse als IDE, btw). Keine Ahnung, wie ich die Werte von Arrays anzeigen lassen kann, da der Pointer &quot;heightMap&quot; ja nur auf den ersten Wert zeigt.<br />
Dieser spielt ja allerdings eine Rolle, also wird das wohl reichen.</p>
<p>Ergebnisse:<br />
Direkt nach dem Initialisieren im Konstruktor wird für &quot;*heightMap&quot; wie erwartet -1 angezeigt (der erste Wert im Array).</p>
<p>Ganz am Anfang von getPipeBounds ist er schon &quot;korrupt&quot;, in diesem Beispiel hatte er den Wert 9765060. Nach der if-Abfrage (i &gt;= visiblePipes) genau dasselbe.</p>
<p>Also im Prinzip die gleichen Ergebnisse, die ich durch Ausgeben festgestellt hatte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2138459</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2138459</guid><dc:creator><![CDATA[Bone008]]></dc:creator><pubDate>Mon, 31 Oct 2011 21:43:19 GMT</pubDate></item><item><title><![CDATA[Reply to 2 Elemente in Pointer-Array behalten nicht ihren Wert on Tue, 01 Nov 2011 00:39:44 GMT]]></title><description><![CDATA[<p>Hat irgendjemand eine Idee, woran das liegen könnte?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2138546</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2138546</guid><dc:creator><![CDATA[Bone008]]></dc:creator><pubDate>Tue, 01 Nov 2011 00:39:44 GMT</pubDate></item><item><title><![CDATA[Reply to 2 Elemente in Pointer-Array behalten nicht ihren Wert on Tue, 01 Nov 2011 06:32:36 GMT]]></title><description><![CDATA[<p>kann es eventuell sein, dass der Destructor von WorldProvider aufegrufen wird bevor getPipeBounds ausgeführt wird?</p>
<p>Ansonsten könntest du mal zeigen wie du den WorldProvider in deinem restlichen code verwendest?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2138566</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2138566</guid><dc:creator><![CDATA[firefly]]></dc:creator><pubDate>Tue, 01 Nov 2011 06:32:36 GMT</pubDate></item><item><title><![CDATA[Reply to 2 Elemente in Pointer-Array behalten nicht ihren Wert on Tue, 01 Nov 2011 08:19:45 GMT]]></title><description><![CDATA[<p>Füge mal</p>
<pre><code class="language-cpp">private:
  WorldProvider(WorldProvider const&amp;);
  WorldProvider&amp; operator=(WorldProvider const&amp;);
</code></pre>
<p>in der Klassendefinition hinzu, ohne diese Dinger zu definieren. Lässt sich das Programm dann noch kompilieren und linken?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2138585</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2138585</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Tue, 01 Nov 2011 08:19:45 GMT</pubDate></item><item><title><![CDATA[Reply to 2 Elemente in Pointer-Array behalten nicht ihren Wert on Tue, 01 Nov 2011 09:49:31 GMT]]></title><description><![CDATA[<p>Du könntest im Debugger einen watchpoint setzen, dann hält das Programm an, wenn sich der Wert des Pointers ändert. Ich kann dir allerdings nicht sagen, wie das in Eclipse geht, zumal du weder Betriebssystem (WinApi = Windows?) noch Compiler und Debugger genannt hast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2138610</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2138610</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Tue, 01 Nov 2011 09:49:31 GMT</pubDate></item><item><title><![CDATA[Reply to 2 Elemente in Pointer-Array behalten nicht ihren Wert on Tue, 01 Nov 2011 12:01:26 GMT]]></title><description><![CDATA[<p>Betriebssystem: Windows 7 (64 bit)<br />
IDE: Eclipse Indigo (für C++)<br />
Compiler: MinGW<br />
Debugger: Keine Ahnung, ist da wohl dabei, bei Eclipse lässt sich einfach auf &quot;Debug&quot; klicken, also nehme ich an, dass das Teil von MinGW ist.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/1725">@firefly</a><br />
In einer anderen Klasse (die die Game-Ticks übernimmt), wird zuerst ein (privater) Pointer auf WorldProvider deklariert:</p>
<pre><code class="language-cpp">WorldProvider* world;
</code></pre>
<p>Wenn das Game gestartet wird (der User drückt Enter), wird die Methode GameTicker::initGame() aufgerufen, die folgendes macht:</p>
<pre><code class="language-cpp">void GameTicker::initGame() {
	if(phase == PHASE_GAME)
		return;
	phase = PHASE_GAME;
	RECT winRect;
	GetWindowRect(hWnd, &amp;winRect);
	world = new WorldProvider(winRect.right - winRect.left,	winRect.bottom - winRect.top);
}
</code></pre>
<p>Im Dekonstruktor von GameTicker wird einfach &quot;delete world&quot; aufgerufen.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/24868">@krümelkacker</a><br />
Nein, beim Compilen kommt folgender Fehler:</p>
<pre><code>..\src\/WorldProvider.h:8:2: error: 'WorldProvider::WorldProvider(const WorldProvider&amp;)' is private
..\src\GameTicker.cpp:59:10: error: within this context
</code></pre>
<p>GameTicker.cpp Linie 59 ist der getter für die Welt und dereferenziert die Welt:</p>
<pre><code class="language-cpp">WorldProvider GameTicker::getWorld() {
	return *world;
}
</code></pre>
<p>(ist das eigentlich eine gute Idee? Anscheinend wird der Copy-Konstruktor aufgerufen?)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2138691</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2138691</guid><dc:creator><![CDATA[Bone008]]></dc:creator><pubDate>Tue, 01 Nov 2011 12:01:26 GMT</pubDate></item><item><title><![CDATA[Reply to 2 Elemente in Pointer-Array behalten nicht ihren Wert on Tue, 01 Nov 2011 12:07:20 GMT]]></title><description><![CDATA[<p>Wenn ich den Copy-Konstruktor public mache (was er meines Wissens doch auch sein sollte, oder?), verschwindet der erste Fehler, dann meckert er nur noch beim Dereferenzieren des Pointers:</p>
<pre><code>[...]/GameTicker.cpp:59: undefined reference to `WorldProvider::WorldProvider(WorldProvider const&amp;)'
</code></pre>
<p>(selbe Linie wie gerade eben, wo &quot;*world&quot; aufgerufen wird)</p>
<p>Danke auf jeden Fall schon mal für eure Hilfe!</p>
<p>....<br />
Ich glaube, ich hab das Problem gelöst! Ich hab jetzt die Methode getWorld() dementsprechend umgeändert, dass sie nur den Pointer zurückgibt, und nicht die Welt selbst. (WorldProvider* als Rückgabetyp)<br />
Jetzt scheint alles zu funktionieren, ich hab nur keine Ahnung warum <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>
<p>Könnte mir das jemand erklären? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2138694</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2138694</guid><dc:creator><![CDATA[Bone008]]></dc:creator><pubDate>Tue, 01 Nov 2011 12:07:20 GMT</pubDate></item><item><title><![CDATA[Reply to 2 Elemente in Pointer-Array behalten nicht ihren Wert on Tue, 01 Nov 2011 12:20:24 GMT]]></title><description><![CDATA[<p>Das worauf krümelkacker dich aufmerksam machen wollte ist, dass du die Regel der großen Drei verletzt haben könntest. Das war kein Vorschlag, wie man das Problem behebt, sondern ein Test, ob dies das Problem ist. Und der Test hat voll angesprungen. Du machst da eine flache Kopie von deinem Pointer und das geht natürlich von der Programmlogik her schief.</p>
<p>Abhilfe: Die naive Lösung wäre natürlich, keine flache Kopie zu machen. Aber das eigentliche Problem ist, warum du überhaupt ein dynamisches Feld selber verwaltest. new[] und delete[] kommen wirklich nie in C++ vor (Eine einzige Stelle (eigener Allokator) fällt mir ein, aber das ist sehr exotisch). new[] und delete[] sind die deutlichsten Anzeichen von allen, dass man einen std::vector möchte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2138699</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2138699</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 01 Nov 2011 12:20:24 GMT</pubDate></item><item><title><![CDATA[Reply to 2 Elemente in Pointer-Array behalten nicht ihren Wert on Tue, 01 Nov 2011 12:23:12 GMT]]></title><description><![CDATA[<p>Bone008 schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/24868">@krümelkacker</a><br />
Nein, beim Compilen kommt folgender Fehler:</p>
<pre><code>..\src\/WorldProvider.h:8:2: error: 'WorldProvider::WorldProvider(const WorldProvider&amp;)' is private
..\src\GameTicker.cpp:59:10: error: within this context
</code></pre>
<p>GameTicker.cpp Linie 59 ist der getter für die Welt und dereferenziert die Welt:</p>
<pre><code class="language-cpp">WorldProvider GameTicker::getWorld() {
	return *world;
}
</code></pre>
</blockquote>
<p>Da haben wir das problem schon, getWorld liefert laut methoden signatur eine kopie des Objektes WorldProvider zurück. Ist das von dir gewollt?<br />
Da du keinen Kopier bzw. Zuweisungs Operator für die Klasse erstellt hast, erstellt der Kompiler diese. Und in diesen generierten Versionen werden die einzelnen Member kopiert (bei deinem array nur der pointer wert und nicht das Array als solches).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2138703</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2138703</guid><dc:creator><![CDATA[firefly]]></dc:creator><pubDate>Tue, 01 Nov 2011 12:23:12 GMT</pubDate></item><item><title><![CDATA[Reply to 2 Elemente in Pointer-Array behalten nicht ihren Wert on Tue, 01 Nov 2011 12:42:09 GMT]]></title><description><![CDATA[<p>Eine Kopie zu erstellen war von mir keineswegs gewollt.<br />
Ich komme aus der Java-Programmierung, und hab nicht angenommen, dass das Zurückgeben eines Wertes eine Kopie erstellt (einzig bei Parametern habe ich den Unterschied von call-by-value und call-by-reference gelernt).</p>
<p>new[] und delete[] scheint ja nicht das Problem gewesen zu sein, aber ich sollte wohl mir mal den std::vector ansehen.</p>
<p>Danke für eure Hilfe, das Problem ist gelöst <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2138715</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2138715</guid><dc:creator><![CDATA[Bone008]]></dc:creator><pubDate>Tue, 01 Nov 2011 12:42:09 GMT</pubDate></item><item><title><![CDATA[Reply to 2 Elemente in Pointer-Array behalten nicht ihren Wert on Tue, 01 Nov 2011 13:07:13 GMT]]></title><description><![CDATA[<p>Bone008 schrieb:</p>
<blockquote>
<p>new[] und delete[] scheint ja nicht das Problem gewesen zu sein, aber ich sollte wohl mir mal den std::vector ansehen.</p>
</blockquote>
<p>Wie man's nimmt. Es war ein direkter Folgefehler, weil du mit rohen Zeigern rumhantierst. Gerade wenn du von Java kommst, solltest du in C++ vorsichtig sein mit Java-Techniken. Als Java-Programmierer solltest du zum Beispiel auch normales new und delete und alle Zeiger als Alarmsignal ansehen, dass du gerade Java in C++ machen möchtest (was keine gute Idee ist).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2138721</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2138721</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 01 Nov 2011 13:07:13 GMT</pubDate></item><item><title><![CDATA[Reply to 2 Elemente in Pointer-Array behalten nicht ihren Wert on Tue, 01 Nov 2011 13:39:36 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Als Java-Programmierer solltest du zum Beispiel auch normales new und delete und alle Zeiger als Alarmsignal ansehen, dass du gerade Java in C++ machen möchtest (was keine gute Idee ist).</p>
</blockquote>
<p>Ich hatte keine andere Lösung gefunden, um world nicht schon im Konstruktor zu initialisieren, als einen Pointer (und damit new/delete) zu verwenden.</p>
<p>Die Welt soll ja erst erstellt werden, wenn initGame() aufgerufen wird, allerdings muss sie auch außerhalb von initGame verfügbar sein (kann also keine statische Variable sein). Wie funktioniert das sonst außer mit new?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2138728</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2138728</guid><dc:creator><![CDATA[Bone008]]></dc:creator><pubDate>Tue, 01 Nov 2011 13:39:36 GMT</pubDate></item><item><title><![CDATA[Reply to 2 Elemente in Pointer-Array behalten nicht ihren Wert on Tue, 01 Nov 2011 13:51:01 GMT]]></title><description><![CDATA[<p>Na, mit einem vector als Klassenmember.</p>
<p>Wobei es etwas ungewöhnlich ist, zu einem Objekt nochmal eine weitere Initialisierungsmethode anzubieten. Sollte das nicht der Konstruktor machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2138730</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2138730</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 01 Nov 2011 13:51:01 GMT</pubDate></item><item><title><![CDATA[Reply to 2 Elemente in Pointer-Array behalten nicht ihren Wert on Tue, 01 Nov 2011 14:24:18 GMT]]></title><description><![CDATA[<p>Das mit dem Vector als heightMap hab ich jetzt verstanden (und umgesetzt).</p>
<p>Ich hab mich jetzt auf das Erstellen von WorldProvider mit new bezogen. Das ist ja nur ein einzelnes Element, wieso bräuchte ich dann da einen vector?</p>
<pre><code class="language-cpp">world = new WorldProvider(winRect.right - winRect.left,    winRect.bottom - winRect.top);
</code></pre>
<p>Warum ich eine initialisierungs-methode verwende? Weil die GameTicker Klasse schon ganz am Anfang erstellt wird, da wird allerdings erst noch der Splash-Screen angezeigt. Erst wenn man Enter drückt, wird das Game gestartet und der WorldProvider soll erstellt werden (initGame).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2138744</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2138744</guid><dc:creator><![CDATA[Bone008]]></dc:creator><pubDate>Tue, 01 Nov 2011 14:24:18 GMT</pubDate></item><item><title><![CDATA[Reply to 2 Elemente in Pointer-Array behalten nicht ihren Wert on Tue, 01 Nov 2011 15:10:09 GMT]]></title><description><![CDATA[<p>Ach so. Bei Objekten mit ungewöhnlicher Lebensdauer ist tatsächlich mal einer der Fälle, wo man mal new braucht (aber dann nimm doch einen passenden Smartpointer). Es macht mir aber sehr den Eindruck, dass du hier versuchst, Java-Design auf C++ zu übertragen. Normalerweise erstellt man keine Objekte im Voraus. Warum gibt es also World schon, wenn es erst später initialisiert werden kann?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2138765</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2138765</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 01 Nov 2011 15:10:09 GMT</pubDate></item><item><title><![CDATA[Reply to 2 Elemente in Pointer-Array behalten nicht ihren Wert on Tue, 01 Nov 2011 15:43:27 GMT]]></title><description><![CDATA[<p>Die Funktion, die die WM_PAINT-message verarbeitet hat eine Instanz von GameTicker zur Verfügung.</p>
<p>In GameTicker ist gespeichert, welche Phase aktuell gerendert werden soll (PHASE_SPLASH für den Splash-Screen oder PHASE_GAME für die eigentliche Spieloberfläche).</p>
<p>Wenn gerade das Spiel läuft, wird über WorldProvider der Bildschirm gerendert.<br />
game.getWorld()-&gt;getPipeBounds(i, pipeRect);</p>
<p>&quot;getWorld&quot; muss ja irgendwo seine WorldProvider-Instanz herbekommen. Und die ist an das GameTicker Objekt gebunden - also ein Member davon.</p>
<p>Allerdings darf die ja erst da sein, wenn das Game gestartet wird.</p>
<p>Wie soll ich &quot;world&quot; NICHT im Vorraus &quot;erstellen&quot;, wenn es eine Member-Variable ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2138790</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2138790</guid><dc:creator><![CDATA[Bone008]]></dc:creator><pubDate>Tue, 01 Nov 2011 15:43:27 GMT</pubDate></item></channel></rss>