求助一个C++编译的问题。
编译出错:
no matches converting function `DoPart0' to type `long int (*)(char *)'
candidates are: long int UsingCCGIEx::DoPart0(char *)
===.h
#define LRESULT long
#define CALLBACK
typedef LRESULT (CALLBACK *TEMPLATE_PROC)(char*);
class CCGIEx {
public:
CCGIEx(const char* szLogFileName);
...
bool AddTemplateProc (char* pszBlockName, TEMPLATE_PROC lpfn);
...
};
===.cpp
class UsingCCGIEx: public CCGIEx
{
public:
UsingCCGIEx (const char* szLogFileName);
...
LRESULT DoPart0 (char* pTemplate);
...
};
UsingCCGIEx:: UsingCCGIEx(const char* szLogFileName) : CCGIEx(szLogFileName)
{
AddTemplateProc("block0", (TEMPLATE_PROC )DoPart0);
}
问题点数:50、回复次数:3Top
1 楼atma(当时明月在)回复于 2003-06-03 14:03:44 得分 10
AddTemplateProc("block0", (TEMPLATE_PROC )DoPart0);
改为:
AddTemplateProc("block0", reinterpre_cast<TEMPLATE_PROC>( static_cast<void*>( DoPart0 ) ) );Top
2 楼hu_zy(白痴一个)回复于 2003-07-11 17:04:52 得分 0
我目前的解决是static LRESULT DoPart0 (CCGIEx* hInstance, char* pTemplate);
atma这个方法也不能编译:
test.cpp: In method `UsingCCGIEx::UsingCCGIEx(const char *)':
test.cpp:30: static_cast from `{unknown type}' to `void *'
make: *** [test] Error 1
rTop
3 楼pengzhenwanli(紫气日盈)回复于 2003-07-11 19:22:57 得分 40
我认为这一句有问题。
AddTemplateProc("block0", (TEMPLATE_PROC )DoPart0);
TEMPLATE_PROC是个普通的函数指针,要指向成员函数,必须使用指向成员函数的指针
typedef LRESULT ( UsingCCGIEx::*TEMPLATE_PROC)(char*);
作为callback函数在class中必须是static.Top




