我正在使用 curl library它通过回调函数返回数据给我,原型(prototype)如下
size_t write_data(void * data, size_t size, size_t nmemb, void * userpointer);
我注意到如果我在我的类中声明一个适合这个原型(prototype)的函数
//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 的一部分并且不要影响问题。
最佳答案
因为没有实例就不能调用非静态方法。由于 new_data_callback
是回调,因此将实例附加到它的唯一方法是通过参数。将其设为 static
会移除实例限制。
关于c++ - 为什么这里需要静态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11266601/