<?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 Array in einer Klasse]]></title><description><![CDATA[<p>Hallo,<br />
ich möchte zum Verwalten der Tastendrücke ein Array benutzen und habe dafür eine Klasse namens Joypad geschrieben. Sie enthält unter anderem diese Funktionen:</p>
<pre><code>public:
	Joypad();
	void poll();
</code></pre>
<p>...und folgende private Daten...</p>
<pre><code>private:
	static const int BUTTON_COUNT = 16;
	keyStruct keys[BUTTON_COUNT];
</code></pre>
<p>keyStruct ist dabei die folgende Struktur:</p>
<pre><code>struct keyStruct
{
	int id;
	bool down;
	bool lastDown;
	bool pressed;
	bool released;
};
</code></pre>
<p>So weit, so gut. Im Konstruktor werden die 16 Objekte dieser Struktur erfolgreich und vollständig gefüllt (unter anderem dieser Zeilenausschnitt:)</p>
<pre><code>for(int i=0; i&lt;BUTTON_COUNT; i++)
{
	keys[i].down = false;
</code></pre>
<p>In der Funktion poll() sollen die Werte unter anderem je nach dem, ob ein Tastendruck vorliegt oder nicht, geändert werden, z.B. so:</p>
<pre><code>for(int i=0; i&lt;BUTTON_COUNT; i++)
{
	keys[i].down = false;
</code></pre>
<p>Vergleiche den Codeausschnitt mit dem darüber...<br />
Der erste, im Konstruktor, funktioniert ausgezeichnet. Der Zweite, in der Memberfunktion poll, lässt das Programm abstürzen (Windows Fehlermeldung). Der Debugger meckert genau bei der Zeile, in der ich den Wert zuweisen will. Wahlweise auch bei allen anderen Variablen der Struktur und sogar, wenn ich das Array davor nicht über Schleifen sondern manuell fülle und abfrage.</p>
<p>Ich bin überfragt. Warum funktioniert das in zwei identischen Fällen einmal problemlos und einmal nicht? Wo liegt der Fehler?</p>
<p>Ich hoffe der Codeausschnitt reicht und jemandem fällt dazu etwas ein.</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/238197/problem-mit-array-in-einer-klasse</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 04:06:55 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/238197.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 07 Apr 2009 17:52:03 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit Array in einer Klasse on Tue, 07 Apr 2009 17:52:03 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich möchte zum Verwalten der Tastendrücke ein Array benutzen und habe dafür eine Klasse namens Joypad geschrieben. Sie enthält unter anderem diese Funktionen:</p>
<pre><code>public:
	Joypad();
	void poll();
</code></pre>
<p>...und folgende private Daten...</p>
<pre><code>private:
	static const int BUTTON_COUNT = 16;
	keyStruct keys[BUTTON_COUNT];
</code></pre>
<p>keyStruct ist dabei die folgende Struktur:</p>
<pre><code>struct keyStruct
{
	int id;
	bool down;
	bool lastDown;
	bool pressed;
	bool released;
};
</code></pre>
<p>So weit, so gut. Im Konstruktor werden die 16 Objekte dieser Struktur erfolgreich und vollständig gefüllt (unter anderem dieser Zeilenausschnitt:)</p>
<pre><code>for(int i=0; i&lt;BUTTON_COUNT; i++)
{
	keys[i].down = false;
</code></pre>
<p>In der Funktion poll() sollen die Werte unter anderem je nach dem, ob ein Tastendruck vorliegt oder nicht, geändert werden, z.B. so:</p>
<pre><code>for(int i=0; i&lt;BUTTON_COUNT; i++)
{
	keys[i].down = false;
</code></pre>
<p>Vergleiche den Codeausschnitt mit dem darüber...<br />
Der erste, im Konstruktor, funktioniert ausgezeichnet. Der Zweite, in der Memberfunktion poll, lässt das Programm abstürzen (Windows Fehlermeldung). Der Debugger meckert genau bei der Zeile, in der ich den Wert zuweisen will. Wahlweise auch bei allen anderen Variablen der Struktur und sogar, wenn ich das Array davor nicht über Schleifen sondern manuell fülle und abfrage.</p>
<p>Ich bin überfragt. Warum funktioniert das in zwei identischen Fällen einmal problemlos und einmal nicht? Wo liegt der Fehler?</p>
<p>Ich hoffe der Codeausschnitt reicht und jemandem fällt dazu etwas ein.</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1692480</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1692480</guid><dc:creator><![CDATA[blDraX]]></dc:creator><pubDate>Tue, 07 Apr 2009 17:52:03 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Array in einer Klasse on Tue, 07 Apr 2009 18:00:40 GMT]]></title><description><![CDATA[<p>blDraX schrieb:</p>
<blockquote>
<p>(Windows Fehlermeldung)</p>
</blockquote>
<p>Welche denn?</p>
<p>Btw, ein zusammenhängender, aufs Wesentliche beschränkter Codeausschnitt (der sich direkt kompilieren lässt), wäre gut.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1692487</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1692487</guid><dc:creator><![CDATA[_matze]]></dc:creator><pubDate>Tue, 07 Apr 2009 18:00:40 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Array in einer Klasse on Tue, 07 Apr 2009 18:26:12 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich habs mal kurz ganz stark reduziert. Reicht aber schon, um das Programm abstürzen zu lassen genau wie das eigentliche:</p>
<pre><code>struct keyStruct
{
	bool pressed;
};

class Joypad
{
private:
	static const int BUTTON_COUNT = 2;
	keyStruct keys[BUTTON_COUNT];

public:
	Joypad();
	void poll();
};

void Joypad::poll()
{
	for(int i=0; i&lt;BUTTON_COUNT; i++)
	{
		keys[i].pressed = false;
	}
}

Joypad *joypad;

void main()
{
	joypad-&gt;poll();
}
</code></pre>
<p>Und zwar mit folgender Fehlermeldung:<br />
<a href="http://img18.imageshack.us/img18/9402/grrm.jpg" rel="nofollow">http://img18.imageshack.us/img18/9402/grrm.jpg</a></p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1692499</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1692499</guid><dc:creator><![CDATA[blDraX]]></dc:creator><pubDate>Tue, 07 Apr 2009 18:26:12 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Array in einer Klasse on Tue, 07 Apr 2009 18:51:51 GMT]]></title><description><![CDATA[<p>Vielleicht könnte es schon etwas bringen, wenn du statt</p>
<blockquote>
<p>void main()</p>
</blockquote>
<p>int main() schreiben würdest. void main() gibt es in C++ nicht.<br />
Und um dir mal eine Frage zu stellen, warum muss der Joypad-Zeiger global definiert sein und auf was zeigt der eigentlich ? <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="😕"
    /> Denk drüber nach.</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1692511</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1692511</guid><dc:creator><![CDATA[Mr Crown]]></dc:creator><pubDate>Tue, 07 Apr 2009 18:51:51 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Array in einer Klasse on Tue, 07 Apr 2009 18:51:01 GMT]]></title><description><![CDATA[<p>joypad ist doch nur ein Zeiger vom Typ Joypad, er zeigt aber nicht auf gültigen Speicher! Das ist der Fehler. Warum willst du hier überhaupt einen Zeiger benutzen? Nimm doch eine ganz normale Instanz. Also:</p>
<pre><code class="language-cpp">Joypad joypad;
</code></pre>
<p>Übrigens, muss joypad global sein? Sowas sollte man, wenn möglich, vermeiden...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1692512</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1692512</guid><dc:creator><![CDATA[_matze]]></dc:creator><pubDate>Tue, 07 Apr 2009 18:51:01 GMT</pubDate></item></channel></rss>