C++ 指向成员函数的指针不是函数指针

C++ pointer to member function not a function pointer

假设我有以下定义:

class ScriptInterpreter {
public:
class cell;
typedef ScriptInterpreter::cell (ScriptInterpreter::*proc_t) (const std::vector<cell> &);

class cell {
public:
  proc_t proc;
};

ScriptInterpreter::cell proc_add(const std::vector<cell> & c);
};

下面的代码继续:

ScriptInterpreter::eval(ScriptInterpreter::cell cell, environment * env)
{
// ...

ScriptInterpreter::cell c;
c.proc = &ScriptInterpreter::proc_add;

return (c.*proc_)(exps);
}

在我尝试调用函数指针的那一行出现错误

error: called object type 'proc_t' (aka 'ScriptInterpreter::cell (ScriptInterpreter::*)(const std::vector<cell> &)') is not
  a function or function pointer

当我在 func 前面添加 * 时,该行如下所示:

ScriptInterpreter::cell c = (proc_cell.*proc_)(exps);

它产生这个:

error: use of undeclared identifier 'proc_'

我已经查看了 Callback functions in c++ 和其他类似的问题,但没有任何东西真正给我提示哪里出了问题,也没有提供任何关于我的错误的信息。我绝对没有任何名字两次或类似的东西。 同样在阅读 what is an undeclared identifier error and how do i fix it 之后,我很确定我一切都好。

那我做错了什么?

编辑:使用真实代码而不是占位符代码更新了代码

为了通过指向成员类型的指针调用成员函数,您必须使用运算符.* 或运算符->*。在左侧,您必须指定要为其调用该成员函数的对象。

在你的情况下,尝试这样做可能如下所示

A::B b_object;
b_object.func = &A::func_to_call;

A a_object;
A::B other_b_object = (a_object.*b_object.func)();

请注意,由于指针被声明为指向 A 的成员,因此 .* 运算符需要在左侧有一个 A 类型的对象。

但是,在您的特定情况下,这是格式错误的,因为 b_object.func 是私有的并且无法从 main 访问。

P.S。 int main,不是 void main