struct mit Funktionspointer
-
Moin! Ich bin noch recht unerfahren mit C-Programmierung aber wage mich derzeit an ein kleines Projekt, in dem ich ein Menü erstelle. Die Menüpunkte und Optionen etc. werden in einem
struct
festgehalten. In dem jeweiligenstruct
möchte ich mittels eines Funktionspointers das (weitere) Menü aufrufen. Aber ich weiß einfach nicht wie ich das implementieren kann.. so sieht mein nicht lauffähiger Code-Ausschnitt zur Zeit aus:int exitMenu = 0; char pfeiltasten = 0; char ausgabe[32]; struct menu { int menuAnzahl; char menuName[16]; int menuAktiv; void (*func)(struct menu *); }; struct menu Mainmenu[9] = { {9, "Hauptmenue", 0}, {0, "Anzeige1", 0, Mainmenu[1].func=menuChooser(Anzeige1menu)}, {0, "Anzeige2", 0, Mainmenu[2].func=menuChooser(Anzeige2menu)}, {0, "Anzeige3", 0, Mainmenu[3].func=menuChooser(Anzeige3menu)} }; void menuChooser(struct menu *ptr) { int pos = 0; int menuLen = ptr[0].menuAnzahl; while (exitMenu!=1) { system("cls"); sprintf(ausgabe," %s\n>%s\n",ptr[pos].menuName,ptr[pos+1].menuName); printf(ausgabe); pfeiltasten = getch(); switch(pfeiltasten) { case '3': //rauf if(pos<menuLen-2) { pos++; } break; case '4': //auswahl ptr[pos+1].func; break; case '5': //runter if(pos>0) { pos--; } break; default: break; } } exitMenu = 0; pos = 0; }
Anzeige1Menu, Anzeige2Menu und Anzeige3Menu sind ebenfalls structs die so aufgebaut sind wie das
struct
Mainmenu.Hat da jemand eine Idee wie ich die Funktion über den/einen Pointer aufrufen kann?
Liebe Grüße!
-
Den Parameter kannst du bei der Initialsierung so nicht mit angeben.
Pack ihn mit in die struct, etwa in der Art:struct menu { int menuAnzahl; char menuName[16]; int menuAktiv; void (*func)(struct menu *); struct menu *para; }; struct menu Mainmenu[9] = { {9, "Hauptmenue", 0}, {0, "Anzeige1", 0, menuChooser, Anzeige1menu}, {0, "Anzeige2", 0, menuChooser, Anzeige2menu}, {0, "Anzeige2", 0, menuChooser, Anzeige2menu}, {-1, "", 1, NULL, NULL} // Endekennung }; ... //Und bei case 4 musst du noch den Parameter mit angeben ptr[pos+1].func(ptr[pos+1].para)
-
Vielen, vielen Dank! Das Menü funktioniert so nun einwandfrei!