///////////////////// 以下是C++的代码////////////////////////////
#include <stdio.h>enum EventType
{
  a,
  b,
  c,
  d
};
typedef void Callback (EventType, void*, void*);
class A

public:
 A(){};
~A(){};  EventType type;
Callback* callback;
void* data;
void Register(EventType ,Callback ,int );
}; 
void A::Register(EventType t,Callback c,void* d)

  type = t;
  callback = c;
  data = d;
}(报告出错了)
void main(void)
{
}///////////////////// C++的代码 完毕////////////////////////////报告的错误是:D:\tst.cpp(29) : error C2511: 'Register' : overloaded member function 'void (enum EventType,void (__cdecl *)(enum EventType,void *,void *),void *)' not found in 'A'
        D:\tst.cpp(16) : see declaration of 'A'我想可能是 因为有 typedef void Callback (EventType, void*, void*); 就做了替换,Register(.....)的参数都不一样了吧?
怎么改正呢?
///////////////////// 以下是C的代码////////////////////////////#include <stdio.h>enum EventType
{
  a,
  b,
  c,
  d
};
typedef void Callback (EventType, void*, void*);EventType type;
Callback* callback;
void* data;void Register(EventType t, Callback c,void* d)
{
  type = t;
  callback = c;
  data =d ;
  return ;
}
void main(void)
{
}
///////////////////// C的代码 完毕////////////////////////////

解决方案 »

  1.   

    #include <stdio.h>enum EventType
    {
      a,
      b,
      c,
      d
    };
    typedef void Callback (EventType, void*, void*);
    class A

    public:
     A(){};
    ~A(){};  EventType type;
    Callback* callback;
    void* data;
    void Register(EventType ,void (*Callback)(EventType, void*, void*) ,void * );
    }; 
    void A::Register(EventType t,Callback c,void* d)

      type = t;
      callback = c;
      data = d;}
    void main(void)
    {
    }OK!
      

  2.   

    函数指针定义应这样
    typedef void ( [调用规则] *Callback)(EventType, void*, void*);定义变量的时候直接使用Callback m_callback就不会有上面的问题了。
      

  3.   

    你头文件里面是
    void Register(EventType ,Callback ,int );而函数实现体是
    void A::Register(EventType t,Callback c,void* d)最后一个参数不对
      

  4.   

    还有回调函数应该如下声明
    typedef void (*Callback) (EventType, void*, void*);