Problem mit Array in einer Klasse
-
Hallo,
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:public: Joypad(); void poll();...und folgende private Daten...
private: static const int BUTTON_COUNT = 16; keyStruct keys[BUTTON_COUNT];keyStruct ist dabei die folgende Struktur:
struct keyStruct { int id; bool down; bool lastDown; bool pressed; bool released; };So weit, so gut. Im Konstruktor werden die 16 Objekte dieser Struktur erfolgreich und vollständig gefüllt (unter anderem dieser Zeilenausschnitt:)
for(int i=0; i<BUTTON_COUNT; i++) { keys[i].down = false;In der Funktion poll() sollen die Werte unter anderem je nach dem, ob ein Tastendruck vorliegt oder nicht, geändert werden, z.B. so:
for(int i=0; i<BUTTON_COUNT; i++) { keys[i].down = false;Vergleiche den Codeausschnitt mit dem darüber...
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.Ich bin überfragt. Warum funktioniert das in zwei identischen Fällen einmal problemlos und einmal nicht? Wo liegt der Fehler?
Ich hoffe der Codeausschnitt reicht und jemandem fällt dazu etwas ein.
Gruß
-
blDraX schrieb:
(Windows Fehlermeldung)
Welche denn?
Btw, ein zusammenhängender, aufs Wesentliche beschränkter Codeausschnitt (der sich direkt kompilieren lässt), wäre gut.
-
Hallo,
ich habs mal kurz ganz stark reduziert. Reicht aber schon, um das Programm abstürzen zu lassen genau wie das eigentliche: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<BUTTON_COUNT; i++) { keys[i].pressed = false; } } Joypad *joypad; void main() { joypad->poll(); }Und zwar mit folgender Fehlermeldung:
http://img18.imageshack.us/img18/9402/grrm.jpgGruß
-
Vielleicht könnte es schon etwas bringen, wenn du statt
void main()
int main() schreiben würdest. void main() gibt es in C++ nicht.
Und um dir mal eine Frage zu stellen, warum muss der Joypad-Zeiger global definiert sein und auf was zeigt der eigentlich ?
Denk drüber nach.Gruß
-
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:
Joypad joypad;Übrigens, muss joypad global sein? Sowas sollte man, wenn möglich, vermeiden...