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

C++98环境下如何通过类成员函数指针数组正确调用类方法

问题说明与解决方法

报错原因

你遇到的报错是因为C++的非静态成员函数指针和普通函数指针的调用规则不同:

  • C语言不存在成员函数的概念,你写的(*f[i])()是普通函数指针的调用语法,在C场景下合法
  • C++的非静态成员函数调用隐式依赖this指针,调用成员函数指针时必须明确绑定对应的类实例,需要使用.*(针对实例对象)或->*(针对实例指针)运算符,不能直接解引用调用。

解决方案

你现在是在Dummy类的caller成员函数内部,直接用当前实例的this指针绑定成员函数指针即可,该语法完全符合C++98标准。

修正后的class.cpp代码如下:

void Dummy::caller( std::string id ) {
    void    (Dummy::*f[4])() = {&Dummy::f1, &Dummy::f2, &Dummy::f3, &Dummy::f4};
    std::string v[4] = {"f1", "f2", "f3", "f4"};
    
    for (int i = 0; i < 4; i++) {
        if (id == v[i]) {
            // 用this指针绑定成员函数指针,使用->*运算符调用
            (this->*f[i])();
            break;
        }
    }
}

如果是在类外部调用成员函数指针,写法为实例名.*函数指针名(),比如你声明了Dummy d;,对应调用语法就是(d.*f[0])();。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 19:45:04