【问题标题】:Nameless class or object or function, the meaning of code无名类或对象或函数,代码的含义
【发布时间】:2019-10-17 10:53:02
【问题描述】:

我看不懂函数的意思

size_t WriteCallback(char *contents, size_t size, size_t nmemb, void *userp)
{
    ((std::string*)userp)->append((char*)contents, size * nmemb);
    return size * nmemb;
}

我试图在 c++ 上运行简单的 curl 函数,以便在 ue4 中使用。 Curl 工作正常,但我正在尝试读取响应,将响应接收到字符串中,因为它有点 js ajax 的工作原理。

找到解决方案from here

在 xcode c++ 中工作正常

但在 ue4 中:

使用 std::string

    ((std::string*)userp)->append((char*)contents, size * nmemb);
/Users/Documents/Unreal Projects/curlTest/Source/curlTest/curlTestCharacter.cpp:114:7: error: no member named 'string' in namespace 'std'; did you mean 'cString'?

使用 cString :

    ((cString*)userp)->append((char*)contents, size * nmemb);
/Users/Documents/Unreal Projects/curlTest/Source/curlTest/curlTestCharacter.cpp:114:15: error: expected expression

试图找出原因,但不知道上面的功能,它是如何工作的,如果xcode运行良好那么,这是什么原因。匿名函数、指针和c++的一些特性?

如何更人性化或更轻松地使用此代码,以及如何处理错误?

没有数学,没有加法-减法,var或func,类或对象,如果这段代码是什么意思

((std::string*)userp)->append((char*)contents, size * nmemb);

由于我仍然没有发现如何像 ajax 那样简单地接收 curl 响应,这仍然可以工作,但它是如何工作的,我该如何使用它?

任何帮助,两天试图弄清楚,试图简单地运行我以前在命令行和php代码中使用的curl

【问题讨论】:

  • 我认为cString 没有append 方法。您需要查看文档并找到等效方法。
  • 从错误信息中我猜cString 没有append 方法。
  • 您需要将userp 转换回它实际指向的对象类型。 (char*)contents 超级没必要。
  • @RichardCritten 我试图使用 std::string 但仍然有错误 "error: no member named 'string' in namespace 'std'; 你的意思是 'cString'" 。是否有 curl 选项只是为了接收作为内容的响应
  • 我认为您缺少#include <string>

标签: c++ xcode curl unreal-engine4


【解决方案1】:
size_t WriteCallback(char *contents, size_t size, size_t nmemb, void *userp)
{
    ((std::string*)userp)->append((char*)contents, size * nmemb);
    return size * nmemb;
}

如果没有任何进一步的上下文,我猜这是一个库(可能是 curl ?)正在调用的回调,以便您处理接收到的数据。 contents 是字符串数据本身,sizenmemb 描述了字符串中有多少数据(size 是每个字符的宽度,nmemb 是字符数,也许?),@987654327 @ 是一个自定义数据指针,当您调用生成对该回调的调用的函数时,您可能会传入该指针。我猜你的意思是返回你处理的字节数。

在这个特定函数的情况下,我猜你正在传递一个std::string 指针。每当此库收到数据时,它都会将其附加到您的 std::string

((std::string*)userp)->append((char*)contents, size * nmemb);
/Users/Documents/Unreal Projects/curlTest/Source/curlTest/curlTestCharacter.cpp:114:7: error: no member named 'string' in namespace 'std'; did you mean 'cString'?

这是由于不包含标头造成的 - 在源文件顶部添加 #include <string>

((cString*)userp)->append((char*)contents, size * nmemb);
/Users/Documents/Unreal Projects/curlTest/Source/curlTest/curlTestCharacter.cpp:114:15: error: expected expression

看起来cString 类没有名为append 的成员函数。您必须查看cString 的头文件或查阅其文档以确定要使用的适当函数。

【讨论】:

  • 感谢您的回答,我真的没有使用标题“字符串”,因为我认为字符串是字符串的每个位置,std::string 是一个有方法的对象,它与任务。感谢您的回答。我是 C++ 新手,这确实有助于弄清楚
猜你喜欢
  • 2012-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多