我正在用 C++ 创建一个带有很多菜单和子菜单的控制台应用程序。我显示菜单的方式是通过 do-while 循环。我创建了一个函数来显示具有三个参数的菜单循环 - 第一个是与菜单中有多少选项有关的整数,第二个是显示菜单的函数,第三个是执行用户输入的选择的另一个函数.
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;
}
我收到的错误是"error C2102: '&' requires l-value"。我对编程有点陌生,这是我第一次将函数作为参数传递。我正在制作这个函数来消除我已经注释掉的代码。任何人都可以指出我出错的地方和可能的解决方案。如果没有,我会为每个我知道是不好的编程习惯的菜单使用重复的代码。