0
函數指針我有如下函數指針聲明:錯誤與回調
int Start(char* pName, void (*callback)(void *));
當我傳遞函數指針象下面這樣:
Start("Name", &Service::callbackStatus(void*));
我收到以下錯誤:
錯誤:在'void'之前期望初級表達式。
什麼問題?
函數指針我有如下函數指針聲明:錯誤與回調
int Start(char* pName, void (*callback)(void *));
當我傳遞函數指針象下面這樣:
Start("Name", &Service::callbackStatus(void*));
我收到以下錯誤:
錯誤:在'void'之前期望初級表達式。
什麼問題?
當您將函數指針傳遞給函數時,只需傳遞函數名稱。
Start("Name", &Service::callbackStatus);
傳遞函數指針可以做以下的方法:
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);
另一種方式是通過指針的靜態成員函數。它可以以類似於普通非成員函數的方式使用。
嘿DAC84,謝謝你的回覆。但我的問題沒有解決。我得到錯誤如下:錯誤:沒有匹配的函數調用'start :: Start(const char [10],void(Service :: *)())' – Naveen 2012-04-27 05:59:04