我有如下函数指针声明:
int Start(char* pName, void (*callback)(void *));
当我传递函数指针时如下:
Start("Name", &Service::callbackStatus(void*));
我收到以下错误:
错误:在'void'之前预期的primary-expression。
有什么问题?
答案 0 :(得分:0)
当您将函数指针传递给函数时,只需传递函数名称。
Start("Name", &Service::callbackStatus);
答案 1 :(得分:0)
传递函数指针可以通过以下方式完成:
int Start( char* pName, void (Service::* callback)(void *), Service& obj )
{
(obj.*(callback))( pName );
return 0;
}
...
Service obj;
Start( "Name", &Service::callbackStatus, obj );
但这很丑陋。
使用C ++,将接口的指针或引用传递给函数更为优雅:
class MyInterface
{
public:
virtual void callbackStatus(void* a) = 0;
};
class Service : public MyInterface
{
public:
void callbackStatus(void* a) { std::cout << "hello\n"; }
};
int Start( char* pName, MyInterface& obj )
{
obj.callbackStatus( pName );
return 0;
}
...
Service obj;
Start( "Name", obj );
另一种方法是将指针传递给静态成员函数。它可以与普通的非成员函数类似地使用。