读书人

静态函数指针数组的有关问题

发布时间: 2012-02-24 16:30:39 作者: rapoo

静态函数指针数组的问题
class ClassA
{
public:
ClassA(HINSTANCE hInstance);
~ClassA(void);
private:
typedef int (ClassA::*Fun)(int);
HANDLE hRunThread;
static Fun funs[4];
int funtion(HINSTANCE hInstance);
static DWORD WINAPI ClassA::runThread (PVOID pArg);
static int fun1(int i){return i;};
static int fun2(int i){return i;};
static int fun3(int i){return i;};
static int fun4(int i){return i;};
};

ClassA::ClassA(HINSTANCE hInstance)
{
funs[0] = &ClassA::fun1;
funs[1] = &ClassA::fun2;
funs[2] = &ClassA::fun3;
funs[3] = &ClassA::fun4;
funtion(hInstance);
}
ClassA::~ClassA(void)
{
}
int ClassA::funtion(HINSTANCE hInstance)
{
hRunThread = CreateThread (NULL, 0, runThread, hInstance, 0, 0);
if (hRunThread)
CloseHandle (hRunThread);
return 1;
}
DWORD WINAPI ClassA::runThread (PVOID pArg)
{
while(1){};
}


error C2440: '=' : cannot convert from 'int (__cdecl *)(int)' to 'ClassA::Fun'
There is no context in which this conversion is possible

红色部分有错,如何解决???

[解决办法]

C/C++ code
class ClassA{public:  ClassA(HINSTANCE hInstance);  ~ClassA(void);private://  typedef int (ClassA::*Fun)(int);    typedef int (*Fun)(int);  //here~~~~~~~~~  HANDLE hRunThread;  static Fun funs[4];  int funtion(HINSTANCE hInstance);  static DWORD WINAPI ClassA::runThread (PVOID pArg);  static int fun1(int i){return i;};  static int fun2(int i){return i;};  static int fun3(int i){return i;};  static int fun4(int i){return i;};};ClassA::Fun ClassA::funs[4];//here~~~~~~~~~~ClassA::ClassA(HINSTANCE hInstance){funs[0] = &ClassA::fun1;funs[1] = &ClassA::fun2;funs[2] = &ClassA::fun3;funs[3] = &ClassA::fun4;  funtion(hInstance);}ClassA::~ClassA(void){}int ClassA::funtion(HINSTANCE hInstance){  hRunThread = CreateThread (NULL, 0, runThread, hInstance, 0, 0);  if (hRunThread)  CloseHandle (hRunThread);  return 1;}DWORD WINAPI ClassA::runThread (PVOID pArg){  while(1){};} 

读书人网 >C++

热点推荐