Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何从包含来自另一个对象的函数指针的对象调用函数?_C++_Member Function Pointers - Fatal编程技术网

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;