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
。
假设我有以下定义:
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
。