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. 😞 )


Anmelden zum Antworten