开关和映射问题 - 调用的对象类型不是函数或函数指针
Switch & Mapping issues - Called object type is not a function or function pointer
我的 switch 函数有问题,它使用映射从我创建的 class 调用函数,并使用 switch 函数来选择它们。
void MerkelMain::processUserOption()
{
std::map<int, void(MerkelMain::*)()> menu;
menu[1] = &MerkelMain::printHelp;
menu[2] = &MerkelMain::printMarketStats;
menu[3] = &MerkelMain::enterOffer;
menu[4] = &MerkelMain::enterBid;
menu[5] = &MerkelMain::printWallet;
menu[6] = &MerkelMain::goToNextTimeFrame;
switch (MerkelMain::getUserOption())
{
case 1:
menu[1]();
break;
case 2:
menu[2]();
break;
case 3:
menu[3]();
break;
case 4:
menu[4]();
break;
case 5:
menu[5]();
break;
case 6:
menu[6]();
break;
default:
std::cout << "Invalid input. Please enter a value between 1 and 6." << std::endl;
}
}
这是我收到的编译错误。
所有这些映射的值都是成员函数指针,需要特殊的语法来调用。
例如,对于您的第一个地图条目,您需要
(this->*menu[1])();
^^^^^^^^^^^^^^^^
或使用更通用的函数std::invoke
(需要 C++17 或更高版本)
#include <functional> // std::invoke
std::invoke(menu[1], this);
我的 switch 函数有问题,它使用映射从我创建的 class 调用函数,并使用 switch 函数来选择它们。
void MerkelMain::processUserOption()
{
std::map<int, void(MerkelMain::*)()> menu;
menu[1] = &MerkelMain::printHelp;
menu[2] = &MerkelMain::printMarketStats;
menu[3] = &MerkelMain::enterOffer;
menu[4] = &MerkelMain::enterBid;
menu[5] = &MerkelMain::printWallet;
menu[6] = &MerkelMain::goToNextTimeFrame;
switch (MerkelMain::getUserOption())
{
case 1:
menu[1]();
break;
case 2:
menu[2]();
break;
case 3:
menu[3]();
break;
case 4:
menu[4]();
break;
case 5:
menu[5]();
break;
case 6:
menu[6]();
break;
default:
std::cout << "Invalid input. Please enter a value between 1 and 6." << std::endl;
}
}
这是我收到的编译错误。
所有这些映射的值都是成员函数指针,需要特殊的语法来调用。
例如,对于您的第一个地图条目,您需要
(this->*menu[1])();
^^^^^^^^^^^^^^^^
或使用更通用的函数std::invoke
(需要 C++17 或更高版本)
#include <functional> // std::invoke
std::invoke(menu[1], this);