多くのメニューとサブメニューを備えたコンソール アプリケーションを c++ で作成しています。メニューを表示する方法は、do-while ループです。3 つのパラメーターを使用してメニュー ループを表示する関数を作成しました。1 つ目はメニュー内のオプションの数に関連する整数、2 つ目はメニューを表示する関数、3 つ目はユーザーが入力した選択を実行する別の関数です。 .
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;
}
表示されるエラーは「エラー C2102: '&' には左辺値が必要です」です。私はプログラミングに少し慣れていませんが、関数をパラメーターとして渡すのはこれが初めてです。コメントアウトしたコードを削除するために、この関数を作成しています。誰でも私が間違っている場所と可能な解決策を指摘できますか? そうでない場合は、各メニューに重複したコードを使用するだけです。これは、プログラミングの習慣が悪いとわかっています。