如何将一个类中的成员函数付给一个回调函数!
如下:
typedef void (CALLBACK * OnCallBack)();
class aclass
{
  OnCallBack funCallBack;
}class bclass
{
   void CALLBACK fun(); 
}main()
{
   aclass aobject;
   bclass bobject;
   bobject.funCallBack = aobject.fun;
}
这样不行,编译器认为funCallBack和fun类型不同

解决方案 »

  1.   

    typedef void (CALLBACK * OnCallBack)();
    class aclass
    {
      static OnCallBack funCallBack;
    }class bclass
    {
       void CALLBACK fun(); 
    }main()
    {
       aclass aobject;
       bclass bobject;
       bobject.funCallBack = aclass::fun;
    }
    这样试试
      

  2.   

    不行。
    aclass.htypedef void (CALLBACK * OnCallBack)();
    class aclass
    {
      OnCallBack funCallBack;
    }bclass.hclass bclass
    {
      bclass(); 
      void CALLBACK fun(); 
    }bclass.cppbclass::bclass()
    {
      aclass aobject;
      aobject.funCallBack = fun;
    }
    这样也不行!
      

  3.   

    帮你编译了一下
    这样比较好
    typedef  void (*OnCallBack) ();class aclass
    {
    public:
      static OnCallBack funCallBack;
    };class bclass
    {
    public:
       OnCallBack pfunB;
    };void main()
    {
       bclass bobject;
       bobject.pfunB = aclass::funCallBack;
    }
      

  4.   

    class bclass
    {
    public
    static void CALLBACK PFunB();
    }
      

  5.   

    typedef void (CALLBACK * OnCallBack)();
    class aclass
    {
      static void CALLBACK funCallBack();
    }class bclass
    {
       OnCallBack pfunB;
    }main()
    {
       aclass aobject;
       bclass bobject;
       bobject.pfunB = aclass::funCallBack;
    }
      

  6.   

    typedef void (CALLBACK * OnCallBack)();
    class aclass
    {
      static void CALLBACK funCallBack();
    }class bclass
    {
       OnCallBack pfunB;
    }main()
    {
       aclass aobject;
       bclass bobject;
       bobject.pfunB = aclass::funCallBack;
    }
      

  7.   

    flyelf(空谷清音) 说的对
    typedef void (CALLBACK * OnCallBack)();
    class aclass
    {
      OnCallBack funCallBack;
    }class bclass
    {
       void CALLBACK fun(); 
    }main()
    {
       aclass aobject;
       bclass bobject;
       bobject.funCallBack = aobject.fun;
    }
      

  8.   

    #include <stdio.h>class aclass;
    typedef void (aclass::*pfOnCallBack)();class aclass
    {
    public:
    void OnCallBack(){printf("hahahahaha\n");}
    };
    int main()
    {
    aclass a;
    pfOnCallBack pa; pa = aclass::OnCallBack;
    (a.*pa)(); return 0;

    }我还不知道怎么把指针放到另一个类里面
      

  9.   

    在builder c++中有一种回调函数是这样声明的
    typedef void (__closure*pfOnCallBack)();
    这种声明了__closure的回调函数是可以接受类中的非静态成员函数的指针,例如:
    pfOnCallBack OnCallBack;
    class aclass
    {
        void fun;
    }OnCallBack = aobject.fun;
    请问在VC中可以这样做吗?如何能实现?
      

  10.   

    我在想一个问题,你这样做真的可以回调吗?
    能不能吧WinProc函数也封装在类里??
    回调函数好象必须是静态的!我认为的原因是调用你函数的程序必须确定你函数的入口.
      

  11.   

    在VC里好像非静态成员函数不能作回调函数,换句话说,不能用函数指针调用非静态成员函数。如果BC里真有__closure这样的东西,那简直是太帅了!需要以类似回调的方式调用非静态成员函数时,我一般用CCmdTarget类派生一个类,然后发消息。当然,如果调用方不是自己编的那就郁闷了。