C++ - 将rapidjson::Document 作为参数传递给函数

J. *_*Doe 4 c++ json arguments rapidjson

我将指针传递给rapidjson::Document作为参数。

foo(rapidjson::Document* jsonDocument)
{
    std::cout << jsonDocument["name"] << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

但我无法jsonDocument["name"]访问 name 属性。

尝试不使用指针会导致错误:

error: 'rapidjson::GenericDocument<Encoding, Allocator, StackAllocator>::GenericDocument(const rapidjson::GenericDocument<Encoding, Allocator, StackAllocator>&) [with Encoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>; StackAllocator = rapidjson::CrtAllocator]' is private
GenericDocument(const GenericDocument&);
Run Code Online (Sandbox Code Playgroud)

有人能帮我吗?

Gui*_*cot 5

使用引用或值作为参数。将 与指针一起使用[]将尝试使用您的文档,就好像它是文档数组一样。引用或值将调用预期的运算符。

// a const reference
foo(const rapidjson::Document& jsonDocument) {
    std::cout << jsonDocument["name"] << std::endl;
}

// a copy (or move)
foo(rapidjson::Document jsonDocument) {
    std::cout << jsonDocument["name"] << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

我建议您使用参考,因为您的函数不需要消耗文档中的任何资源,而只需观察并打印一个值。

该函数的调用将如下所示:

rapidjson::Document doc = /* ... */;

foo(doc);
Run Code Online (Sandbox Code Playgroud)