C++ 如何从包含来自另一个对象的函数指针的对象调用函数?
让我们说清楚C++ 如何从包含来自另一个对象的函数指针的对象调用函数?,c++,member-function-pointers,C++,Member Function Pointers,让我们说清楚 enum toto {F1, F2, F3}; typedef void A::*func(); class A { void f1(); void f2(); void f3(); }; class B { func _f; int _x; int _y; B(func f, int x, int y) : _f(f), _x(x), _y(y) }; class C { A *a; std::map<toto, B *> _
enum toto {F1, F2, F3};
typedef void A::*func();
class A
{
void f1();
void f2();
void f3();
};
class B
{
func _f;
int _x;
int _y;
B(func f, int x, int y) : _f(f), _x(x), _y(y)
};
class C
{
A *a;
std::map<toto, B *> _map;
_map[F1] = new B(&A::f1, 42, 42);
_map[F2] = new B(&A::f2, 12, 21);
_map[F3] = new B(&A::f3, 0, 0);
toto t;
void app()
{
std::map<toto, B *>::iterator it = _map.find(t);
B *tmp = it->second;
/* HERE IS MY PROBLEM: HOW CAN I CALL THE FUNCTION F1, F2 OR F3 FROM
A VIA B in C ? */
*(tmp->_f)(); // NOT WORKING
}
};
在编译时,我收到以下错误消息:
错误:必须使用“.”或“->”来调用指向“tmp->B::”中成员函数的指针,例如“…->*tmp->B::_f…'
调用指向成员的指针的语法为ptr->*\u f。然而,为什么您认为您可以调用一个on的函数和类型为B的对象?你是说B是从A派生的吗?A::f1等是A的非静态成员函数,所以你需要一个A对象来调用它们。那在哪里?@user3827622 a->*tmp->\u f;