c++ - 如何调用指向成员函数的指针?

标签 c++ compiler-errors pointer-to-member

我遇到了一个我无法理解的编译错误 (MS VS 2008)。弄乱它好几个小时后,它变得模糊不清,我觉得我缺少了一些非常明显(而且非常愚蠢)的东西。这是基本代码:

typedef int (C::*PFN)(int);

struct MAP_ENTRY
    {
    int id;
    PFN pfn;
    };

class C
    {
    ...
    int Dispatch(int, int);
    MAP_ENTRY *pMap;
    ...
    };

int C::Dispatch(int id, int val)
    {
    for (MAP_ENTRY *p = pMap; p->id != 0; ++p)
        {
        if (p->id == id)
            return p->pfn(val);  // <--- error here
        }
    return 0;
    }

编译器在箭头处声称“该术语不计算为采用 1 个参数的函数”。为什么不? PFN 的原型(prototype)是一个接受一个参数的函数,而 MAP_ENTRY.pfn 是一个 PFN。我在这里缺少什么?

最佳答案

p->pfn 是指向成员函数类型的指针。为了通过这样的指针调用函数,您需要使用运算符 ->* 或运算符 .* 并提供类型为 C 的对象> 作为左操作数。你没有。

我不知道应该在此处使用哪个 C 类型的对象 - 只有你知道 - 但在你的示例中它可能是 *这个。在那种情况下,调用可能如下所示

(this->*p->pfn)(val)

为了让它看起来不那么复杂,可以引入一个中间变量

PFN pfn = p->pfn;
(this->*pfn)(val);

关于c++ - 如何调用指向成员函数的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1928431/

相关文章:

c++ - Qt 隐藏空的子菜单

java - 构建 jenetics 库时出现命令行错误

c++ - 如何将成员函数指针传递给 libusb?

c++ - 同时采用指向成员函数的指针和指向 const 成员函数的指针的函数

c++ - 为什么可以通过类类型获取成员函数的地址

c++ - 使用 dgesv_ : C:\. 时出错 ..\Eye Tracker.exe 未找到

c++ - QFtp 仅在目录不存在时才创建目录

c++ - 在 C++ 中声明一个局部变量 const 的好处,如果它的值在编译时是未知的

java - 在类里面找不到符号

模板化继承类中的 C++ 成员变量初始化