c++ - 为什么这里需要静态

标签 c++ static static-methods

我正在使用 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/

相关文章:

Java静态错误

c# - 这些静态变量的可能替代方案是什么?

c++ - 如何连接通过 cython 返回对象引用的 C++ 函数

c++ - 在 Android NDK 上检测 stdint.h 和 C++11

c++ - 无法在静态类函数中递增静态变量

c++ - 如何链接到 Visual C++ 2010 中的 .lib 文件?没有引用项目?

java - 我该如何解决 "Cannot make a static reference to the non-static field or method"?

c++ - 使用 C++11 shared_ptr 错误的 Eclipse 多态性

c++ - 带参数的自由函数,获取返回类型

php - 使用抽象类和静态成员更好地管理功能