You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Switch与映射使用报错:被调用对象类型不是函数或函数指针

问题原因
  • 你声明的std::map<int, void(MerkelMain::*)()>存储的是类非静态成员函数指针,这类指针的调用必须绑定具体的类实例对象,你直接用menu[x]()的调用方式缺少类实例参数,因此触发编译报错。
修复方案

方式1:保留现有结构,修改调用语法

因为当前代码是在MerkelMain类的成员函数内部,可以直接用this指针作为实例绑定对象,成员函数指针的调用语法为(实例指针->*函数指针)(参数列表),修改后switch分支内的调用代码如下:

case 1:
    (this->*menu[1])();
    break;
// 其余case按照相同规则修改即可

方式2:优化冗余的switch结构

既然已经用map做了序号到函数的映射,完全可以省略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;

    int option = getUserOption();
    if (menu.count(option)) {
        (this->*menu[option])();
    } else {
        std::cout << "Invalid input. Please enter a value between 1 and 6." << std::endl;
    }
}

内容的提问来源于stack exchange,提问作者oknotok

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 12:06:03