开关和映射问题 - 调用的对象类型不是函数或函数指针

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);