我使用curl library它通過一個回調函數下面爲什麼靜態需要在這裏
size_t write_data(void * data, size_t size, size_t nmemb, void * userpointer);
我注意到原型返回數據,我認爲如果我宣佈一個函數擬合這臺樣機在我的課
//file Dialog.h
class Dialog : public QDialog
{
private:
int new_data_callback(void * newdata, size_t size, size_t nmemb, QByteArray * buffer);
}
,如果我嘗試在我的Dialog.cpp
curl_easy_setopt(curl_handle,CURLOPT_WRITEFUNCTIION, new_data_callback);
使用它
我得到一個錯誤
Invaid use of member (did you forget the '&'?)
如果我添加static
我的函數聲明,它編譯。
static int new_data_callback(void * newdata, size_t size, size_t nmemb, QByteArray * buffer); //ok
問題
爲什麼靜態需要在這種情況下?
PS:以Q開頭的類例如QDialog是QT的一部分,並且不影響該問題。
因爲非靜態成員函數對'this'有一個隱式參數;即你的有效簽名看起來像'int new_data_callback(Dialog * this,void * newdata,size_t size,size_t nmemb,QByteArray * buffer);',這顯然不是'curl_easy_setopt'想要的簽名。 – ildjarn