C++ curl WRITEFUNCTION和类

C++ curl WRITEFUNCTION和类,c++,curl,C++,Curl,我有一个这样的类标题。我想在函数服务器内部调用curl WRITEFUNCTION,它将使用handle写入字符串内容。 虽然它一直给我错误 class Filter{ private: string contents; bool Server(void); public: void handle(void *, size_t, size_t, void *); }; 错误所指的行是CURLOPT_WRITEFUNCTION的行。。。。我的卷发请求看起来像这样 e

我有一个这样的类标题。我想在函数服务器内部调用curl WRITEFUNCTION,它将使用handle写入字符串内容。 虽然它一直给我错误

class Filter{
private:
    string contents;
    bool Server(void);
public:
    void handle(void *, size_t, size_t, void *);
   };
错误所指的行是CURLOPT_WRITEFUNCTION的行。。。。我的卷发请求看起来像这样

error: invalid use of member (did you forget the ‘&’ ?)
这意味着它无法访问句柄()。。
如何更正此问题?

句柄必须是静态成员函数。可以使用CURLOPT_WRITEDATA将指向筛选器实例的指针作为最后一个参数传递

curl_easy_setopt(curl,CURLOPT_URL, address.c_str());
curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,handle);
curl_easy_perform(curl);
类过滤器
{ 
私人:
std::字符串内容;
静态大小句柄(char*data、size\t size、size\t nmemb、void*p);
size\u t handle\u impl(字符*数据、大小、大小nmemb);
};
大小过滤器::句柄(字符*数据,大小,大小nmemb,无效*p)
{
返回static_cast(p)->handle_impl(数据、大小、nmemb);
}
大小过滤器::handle\u impl(字符*数据,大小,大小nmemb)
{
内容附加(数据,大小*nmemb);
返回大小*nmemb;
}
int main()
{
//curl初始化…应该在构造函数中完成
滤波器f;
curl_easy_setopt(curl、CURLOPT_WRITEDATA和f);
curl\u easy\u setopt(curl、CURLOPT\u WRITEFUNCTION和Filter::handle);
//卷曲清理…应该在析构函数中完成
返回0;
}
字符串温度;
curl\u easy\u setopt(curl,CURLOPT\u WRITEFUNCTION,handle);
curl_easy_setopt(curl、CURLOPT_WRITEDATA和temp);
大小过滤器::句柄(void*ptr、大小、大小nmemb、字符串流)
{
字符串温度(静态转换(ptr),大小*nmemb);
流=温度;
返回大小*nmemb;
}
这就是我如何使它发挥作用的。。这将把网站保存到名为temp的字符串中。

我正在使用

string temp;

curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,handle);
curl_easy_setopt(curl,CURLOPT_WRITEDATA,&temp);

size_t Filter::handle(void *ptr, size_t size, size_t nmemb, string stream)
{
    string temp(static_cast<const char*>(ptr), size * nmemb);
    stream = temp;
    return size*nmemb;
}

这将把回复Web服务器保存到名为result的stringstream。

除了创建实例之外,还有其他方法吗?如果要写入std::string Filter::contents,需要一个实例。如果你想写入一个全局内容缓冲区,你可以使用静态句柄方法或自由句柄函数@Prasanth Madhavan,如果你没有创建实例,
Filter
handle
写入哪一个。这正是我想要的。。看来我所要做的就是正确地阅读手册。我之前跳过了几行(@Prasanth,我的问题的意思是修辞性的。这会创建一个本地std::string temp来存储数据。然后temp被复制到参数流中。当function返回时,两个字符串都将被删除。使用temp.append(…)而是将数据写入全局字符串临时值,或者使用指向全局字符串指针的正确签名,并通过该指针调用append。您应该使用append,因为对于重新加载的一个资源,write函数可能会被多次调用。
string temp;

curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,handle);
curl_easy_setopt(curl,CURLOPT_WRITEDATA,&temp);

size_t Filter::handle(void *ptr, size_t size, size_t nmemb, string stream)
{
    string temp(static_cast<const char*>(ptr), size * nmemb);
    stream = temp;
    return size*nmemb;
}
std::stringstream result;

request.setOpt(cURLpp::Options::WriteStream(&result));
request.perform();