Zeiger auf Strukturarray funktioniert nicht.
-
Moin,
ich habe ein kleines Problem mit meinem Programm und wollte fragen,
ob mir dabei jemand helfen kann.
Folgender Code:struct BUTTONS //Struktur zur Beschreibung eines Buttons { int x1; int y1; int x2; int y2; //x1,x2,y1,y2 Punkte des Buttons oben links und unten rechts unsigned char wert; //Rückgabewert char name[10]; //Aufschrift }; int h_menue() //Hauptmenü meines Programms { struct BUTTONS button[] = { {111,55,222,111,1,"Spiel"}, {111,113,222,166,4,"Ende"}}; // Definieren der beiden Buttons //Hier noch Zeichnen und Beschriften der Buttons return maus_auf_feld(button); // Funktion zum Testen, ob Button gedrückt wurde } int maus_auf_feld(struct BUTTONS* button) { int x,y //x und y haben die Mausposition gespeichert //folgende Schleife wird ausgelöst, wenn auf linken Mausbutton geklickt for(i = 0; i < (i < sizeof(*button) / sizeof(struct BUTTONS)); i++) //solange, bis alle Buttons bearbeitet { if(x > button[i]->x1 && x < button[i]->x2 && y > button[i]->y1 && y < button[i]->y2) // mausklick auf das Feld??? return button[i]->wert; } }
In der for-Schleife der Funktion maus_auf_feld meint der Compiler ihm irgendwie noch ein Pointer
Danke im Voraus für eure Hilfe!
-
Hör mal ich verstehe deine Frage grad gar nicht was ist da genau los
-
Hm, tut mir leid, wenn ich mich mißverständlich ausgedrückt habe.
Also, das Programm dient dazu zu testen, ob mit der Maus auf
einen bestimmten Bereich auf das Programmfenster geklickt wurde.
Wenn ja, wird ein bestimmter Wert zurückgegeben.
Der Funktion maus_auf_feld() wird ein Array übergeben, die Arrayelemente
sind "BUTTONS"-Strukturen. In den sind die Positionen der Buttons für das
Programmmenü gespeichert.
Nun gibt der Compiler aber beim Compilieren die Meldung aus, dass ihm in der
FOR-Schleife der maus_auf_feld()-Funktion ein Pointer fehle.
Meine Frage ist also, ist ein für euch ersichtlicher Fehler in der Verwendung
der Pointer,Array und Strukturen, oder liegt das an meinem Compiler (digital mars),
nämlich, dass der falsch interpretiert.
-
for(i = 0; i < (i < sizeof(*button) / sizeof(struct BUTTONS)); i++)
diese zeile sieht verdächtig falsch aus. wieso zweimal i<... ?
und wo ist die variable 'i' definiert?if(x > button[i]->x1 && x < button[i]->x2 && y > button[i]->y1 && y < button[i]->y2)
'button' ist zwar ein pointer, aber weil du den schon mit [] dereferenzierst, darfst du nicht -> verwenden, sondern .
und: die funktion 'maus_auf_feld' hat nicht in jedem pfad einen rückgabewert.
also, ziemlich mieser code das alles^^
-
for(i = 0; i < (i < sizeof(*button) / sizeof(struct BUTTONS)); i++)
diese zeile sieht verdächtig falsch aus. wieso zweimal i<... ?
und wo ist die variable 'i' definiert?Ups, i ist ausversehen zweimal da reingekommen, beim Kopieren hier ins Forum.
Sieht eigentlich so aus:for(i = 0;(i < sizeof(*button) / sizeof(struct BUTTONS)); i++)
(i wird als int am Anfang der Funktion definiert.)
Die Schleife soll damit feststellen, wie viele "BUTTONS"-Strukturen der Funktion
übergeben worden sind und dann alle nacheinander bearbeiten.Die Funktion maus_auf_feld() enthält auch noch eine Dauerschleife, die nur abbricht, wenn jemand ESC gedrückt hat, oder wenn der linke Mausbutton geklickt wurde.
Im letzteren Fall wird halt die o.g. For-Schleife bearbeitet und bei
Nichtzutreffen wird einfach auf erneutes Drücken des Mausbuttons gewartet.
Ansonsten halt Funktionsabbruch, mit Rückgabe von dem in der Struktur
definierten Wert.Mag sein, dass mein Code etwas unvollständig war, ich werd mir angewöhnen den komplett zu posten
Vielen Dank für deine Hilfe, ich hoffe damit klapts jetzt.
(Kann leider aber erst am Nachmittag, oder Morgen probieren.)