我尝试将rapidjson :: Document对象作为函数参数传递:
std::string json_to_string(rapidjson::Document jmsg)
{
// Convert JSON document to string
rapidjson::StringBuffer buffer;
rapidjson::Writer< rapidjson::StringBuffer > writer(buffer);
jmsg.Accept(writer);
std::string str = buffer.GetString();
return str;
}
如果我按上述方式执行此功能,则在编译代码时出现此错误:
在函数`rapidjson :: GenericDocument中,rapidjson :: MemoryPoolAllocator&gt; :: GenericDocument(rapidjson :: GenericDocument,rapidjson :: MemoryPoolAllocator&gt; const&amp;)&#39;:
../../ rapidjson / document.h:691:未定义引用`rapidjson :: GenericValue,rapidjson :: MemoryPoolAllocator&gt; :: GenericValue(rapidjson :: GenericValue,rapidjson :: MemoryPoolAllocator&gt; const&amp;) &#39; collect2:错误:ld返回1退出状态
如果我从&#34; rapidjson :: Document jmsg&#34;更改参数类型,则错误消失。 to&#34; rapidjson :: Document&amp; jmsg&#34;。使用引用是可以的,但是,如果我没有将它定义为引用类型,我仍然想知道代码有什么问题。
答案 0 :(得分:6)
您无法传递Document
作为值,您必须通过引用或指针传递它。
这是因为Document
无法复制。
我建议在你的情况下使用这个函数声明:
std::string json_to_string(const rapidjson::Document& jmsg)