2012-04-27 34 views
0

函數指針我有如下函數指針聲明:錯誤與回調

int Start(char* pName, void (*callback)(void *)); 

當我傳遞函數指針象下面這樣:

Start("Name", &Service::callbackStatus(void*)); 

我收到以下錯誤:

錯誤:在'void'之前期望初級表達式。

什麼問題?

回答

0

當您將函數指針傳遞給函數時,只需傳遞函數名稱。

Start("Name", &Service::callbackStatus); 
+0

嘿DAC84,謝謝你的回覆。但我的問題沒有解決。我得到錯誤如下:錯誤:沒有匹配的函數調用'start :: Start(const char [10],void(Service :: *)())' – Naveen 2012-04-27 05:59:04

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); 

另一種方式是通過指針的靜態成員函數。它可以以類似於普通非成員函數的方式使用。