我试了一下,简化成了下面的样子(当然比你的例子复杂一点).
本质上,我需要在gfunc(实际上在另外一个文件里面)里面去调用执行myclass里面的函数指针.所以写得有点啰嗦:
#include <iostream>
using namespace std;
typedef struct {
    int (*add)(int a, int b);
} GFUNC_T;
GFUNC_T gfun;
class Test
{
public:
    Test();
public:
    int add(int a, int b);
    int (*padd_func)(int a, int b);
};
int (Test::* padd_func)(int, int) = &Test::add;
Test::Test()
{
    // register function pointer to gfun
    gfun.add = padd_func;
    //gfun.add = &this->add;
}
int Test::add(int a, int b)
{
    return a+b;
}
int main()
{
    Test mytest;
    cout << mytest.add(23, 44) << endl;
    if (gfun.add != NULL)
    {
        cout << gfun.add(10,20);
    }
    return 0;
}
如上,在构造函数里面去注册函数
如果是    //gfun.add = &this->add;编译就会报member function不能做函数指针的错.
但是,改成    gfun.add = padd_func;之后,似乎是没有注册上.我实在想不到为神马了.
或许哪里犯了一个很低级的错误.
麻烦看一下哪里的问题.
【 在 dormouseBHU 的大作中提到: 】
: class Test
: {
: public: 
: ...................
--
FROM 1.202.141.*