Je crée une application console en C++ avec beaucoup de menus et de sous-menus. La façon dont j'affiche mon menu est à travers une boucle do-while. J'ai créé une fonction pour afficher la boucle de menu avec trois paramètres - d'abord un entier qui concerne le nombre d'options dans le menu, le second étant une fonction affichant le menu et le troisième étant une autre fonction qui effectue la sélection entrée par l'utilisateur .C++ Erreur C2102: '&' nécessite une valeur l
class Menu {
public:
void displayInitialMenu(){
system("cls");
string menu = "\n\t\tXXXXXXXXX"\
"\n\n Please select from the following:"\
"\n\n 1. XXXXXXX"\
"\n\n 2. XXXXXXX"\
"\n\n 3. Exit\n";
cout << menu << endl;
}
static bool checkOption (int option, int lower, int upper){
if ((option < lower) || (option > upper)){
return false;
} else {
return true;
}
}
static int readOption(int lower, int upper){
int option = 0;
bool validMenuOption = false;
do{
std::cin >> option;
validMenuOption = checkOption(option, lower, upper);
if (!validMenuOption){
std::cout << "\nError: Input must be between " << lower;
std::cout << " and " << upper << "\n" << std::endl;
}
} while (!validMenuOption);
return option;
}
};
Menu menu;
void menuLoop(int numberOfOptions, void (*displayMenu)(), void (*switchStatement)()){
int menuOption = numberOfOptions;
do {
(*displayMenu)();
menuOption = menu.readOption(1, numberOfOptions);
(*switchStatement)();
} while (menuOption != numberOfOptions);
}
static void performSelectionInitialMenu(int option){
switch (option){
case 1:
break;
case 2:
break;
case 3:
break;
default:
break;
}
}
int main()
{
/*
int menuOption = 3;
do {
menu.displayInitialMenu();
menuOption = menu.readOption(1, 3);
performSelectionInitialMenu(menuOption);
} while (menuOption != 3);
*/
menuLoop(3, &menu.displayInitialMenu(), &performSelectionInitialMenu(3));
return 0;
}
L'erreur que je reçois est "C2102 d'erreur: '&' exige l valeur". Je suis un peu novice en programmation et c'est la première fois que je passe une fonction en paramètre. Je fais cette fonction pour éliminer le code que j'ai commenté. Quelqu'un peut-il pointer vers où je vais mal et une solution possible. Si ce n'est pas le cas, j'utiliserai simplement du code en double pour chaque menu qui, je le sais, est une mauvaise pratique de programmation.
Veuillez poster ** code ** minimum. La première étape en posant une question en ligne est de condenser le code à un minimum absolu qui présente toujours le problème. Cela fait partie de vos devoirs et rend notre tâche beaucoup plus facile. –
En outre, lors de la publication des messages d'erreur, veuillez publier le message d'erreur complet, y compris le numéro de ligne où il s'est produit. – irobot