一个类中调用另一个类得到的函数指针的有关问题,

一个类中调用另一个类得到的函数指针的问题,急啊。
typedef DWORD (A::*FUNTYPE)(int a,int b)

class A
{
public:
  A()
  {
  g_CmdFunTable["t"] = add;
  }
public:
  map<CString,FUNTYPE> g_CmdFunTable;
public:
  int add(int a,int b);
}

class B
{
public:
  void fun()
  {
  在类B中想调用通过表查询到的函数指针,下面的调用中pfn(1,2);得怎么调用才是对的?
  FUNTYPE pfn = g_theDebugInfo.g_CmdFunTable["t"];

  if ( pfn != NULL )
  {
  pfn(1,2);
  }
  }  
}
  另一个类中怎么调用 其他类的 函数指针,
  if ( pfn != NULL )
  {
  pfn(1,2);
  }
在这里调用的时候报错, 这里应该怎么调用的 急求答案 。


------解决方案--------------------
你的g_theDebugInfo这个变量在那里定义了,没看到,要么,你在B里面定义一下“A g_theDebugInfo”,然后这样用。

要么,你把A里面的g_CmdFunTable定义成static类型的,然后B中调用时,用“A::g_CmdFunTable”的方式。

通常来说,如果你真的一个这样的变量,要在两个类里操作,还不如定义成全局变量。如果你非要B类中操作A类的指针,要么在B类里面添加一个A类的成员也行,或者B类继承A类。
------解决方案--------------------
函数指针最好定义为全局函数,而不是类成员函数,类成员函数的入参隐含的包含了this指针,写法为v.f,或者p->f,这里v表示一个类的实例,是一个变量,而p是一个类的实例的指针。 你这里直接使用pfn是全局函数的写法,自然不能工作。
------解决方案--------------------
LZ这种用法,应该把类成员函数定义成静态的就应该可以的。
------解决方案--------------------
用 C++11 的 std::function 包装一下裸指针,然后当普通变量使用