Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何复制rapidjson::值?_C++_Copy_Rapidjson - Fatal编程技术网

C++ 如何复制rapidjson::值?

C++ 如何复制rapidjson::值?,c++,copy,rapidjson,C++,Copy,Rapidjson,我正在尝试将rapidjson::value复制到类成员中 error: ‘rapidjson::GenericValue<Encoding, <template-parameter-1-2> >::GenericValue(const rapidjson::GenericValue<Encoding, <template-parameter-1-2> >&) [with Encoding = rapidjson::UTF8<char

我正在尝试将rapidjson::value复制到类成员中

error: ‘rapidjson::GenericValue<Encoding, <template-parameter-1-2> >::GenericValue(const rapidjson::GenericValue<Encoding, <template-parameter-1-2> >&) [with Encoding = rapidjson::UTF8<char>; Allocator = rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator>]’ is private

你知道如何简单地将rapidjson对象复制到类成员中,以便稍后对其进行分析吗?

要深入复制rapidjson,你应该使用CopyFrom。您还应该为此副本提供一个分配器。因此,您的类成员将是分配器是有意义的,因此将其设置为rapidjson::Document类型,而不是rapidjson::Value(Document从Value继承)

此外,最好将json参数作为引用而不是值

因此,您的函数应该如下所示:

void setData(const rapidjson::Value& json) {
    this->json.CopyFrom(json, this->json.GetAllocator());
}
而您的类成员应定义为:

rapidjson::Document json;

首先,为什么不将其作为引用传递?使用
const-rapidjson::Value&json
,或者删除该常量,但在复制它时将其声明为const毫无意义。我无法删除该常量,我无法控制该部分内容source@tobspr:为什么参数不应为常量?当然,如果它是引用,则更为重要,但如果参数是按值传递的,则仍然有意义。例如,这可防止(意外)修改功能参数。例如,当您打算编写此->json=foo时,json=foo。IMHO使用函数参数作为局部变量并修改其内容也是一种不好的做法。这通常会改变他们的意思,使他们的名字不正确。我记得这个问题。我最终解决它的方法是创建自己的JSON数据结构,然后将rapidjson复制到该数据结构中
rapidjson::Document json;