C++ Funktionen als Parameter in Klassen Übergeben?
C++ Source Code zusammengefügt:
class Menu
{
private:
public:
char input = '0';
std::string options[4] = { "\n\nMAIN MENU\n\n", "Option 1\n", "Option2\n", "End\n\n" };
// Options { TITLE, OPTION1, OPTION2, ..., END
void printMenu();
void Setup();
void ChangeOptions(std::string title, std::string option1, std::string option2);
char getUserInput();
void Engine(void(*f1), void(*f2)); // <-- HIER
void Error(std::string error);
};
// Die Funktion Engine:
void Menu::Engine(void (*f1), void (*f2))
{
Game game;
while (true)
{
system("cls");
printMenu();
input = getUserInput();
if (input == '1')
{
(&f1);
}
else if (input == '2')
{
(&f2);
}
else if (input == '3')
{
break;
}
else
{
Error("Invalid Input");
}
}
}
// Die Funktion, die die Engine aufruft (In der Klasse Game):
void Game::chooseCar()
{
menu.ChangeOptions("\n\nVehicle Picker\n\n", "Next Car\n", "Last Car\n");
menu.Engine(NextCar(), LastCar()); // <-- PROBLEM HIER
}
/* Beide Funktionen die ich übergeben möchte werden Rot unterstrichen.
Außerdem steht dort:
"Das Argument von Typ ""void(Game::*)()"" ist mit dem Parameter vom Typ ""void*"" inkompatibel."
*/
Wie kann ich die Funktion aus der Klasse Game, in die Funktion Engine des Objekts menu übergeben?
2 Antworten
Vom Beitragsersteller als hilfreich ausgezeichnet
Man kann natürlich die gesamte Klasse als neu instanziertes Objekt übergeben, dann gehen die Methoden automatisch mit bzw. sind über die Referenz ansprechbar.
Das mit Funktionszeigern - losgelöst von den Objekten - zu machen, geht vielleicht auch, wirkt aber auch mich wie eine Mischung aus C-Style und OOP.
Aber vielleicht habe ich die Frage auch missverstanden.
Woher ich das weiß:eigene Erfahrung – Hobby und teilweise beruflich
Von gutefrage auf Grund seines Wissens auf einem Fachgebiet ausgezeichneter Nutzer
Computer, programmieren, Spiele und Gaming
Ich meine das ging mit Std::function. Lange nicht mehr benutzt. Hinterher kann man die per parameterName() wieder callen