C++ 为什么这里需要静电
我正在使用它,它通过一个回调函数将数据返回给我,原型如下C++ 为什么这里需要静电,c++,static,static-methods,C++,Static,Static Methods,我正在使用它,它通过一个回调函数将数据返回给我,原型如下 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 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);
}
如果我尝试在我的对话框.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 eg QDialog开头的类是问题的一部分,不会影响问题。因为没有实例就不能调用非静态方法。由于
new\u data\u callback
是一个回调,因此将实例附加到它的唯一方法是通过参数。使其静态
将删除实例限制。因为没有实例就无法调用非静态方法。由于new\u data\u callback
是一个回调,因此将实例附加到它的唯一方法是通过参数。将其设置为静态
将删除实例限制。这是因为函数是如何被调用的。非静态类函数需要调用其他信息。也就是这个指针的指针。当您将new\u data\u callback
传递到curl\u easy\u setopt
时,不提供此实例特定信息。因此,curl没有足够的信息来调用函数
如果类函数是静态定义的,则根据定义,它不能访问类的非静态成员。因此,它不需要如上所述的附加实例信息,可以传递给
set\u easy\u setopt
,这是因为函数是如何被调用的。非静态类函数需要调用其他信息。也就是这个指针的指针。当您将new\u data\u callback
传递到curl\u easy\u setopt
时,不提供此实例特定信息。因此,curl没有足够的信息来调用函数
如果类函数是静态定义的,则根据定义,它不能访问类的非静态成员。因此,它不需要如上所述的附加实例信息,并且可以传递给
set\u easy\u setopt
,因为非静态成员函数具有此
的隐式参数;i、 e.您的有效签名看起来像int new_data_callback(Dialog*this,void*newdata,size\t size,size\t nmemb,QByteArray*buffer)
,这显然不是curl\u easy\u setopt
想要的签名;i、 e.您的有效签名看起来像int new_data_callback(Dialog*this,void*newdata,size\t size,size\t nmemb,QByteArray*buffer)
,这显然不是curl\u easy\u setopt
想要的签名。