rapidjson对象作为函数参数导致编译器错误

时间:2014-07-11 04:50:36

标签: reference rapidjson

我尝试将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;。使用引用是可以的,但是,如果我没有将它定义为引用类型,我仍然想知道代码有什么问题。

1 个答案:

答案 0 :(得分:6)

您无法传递Document作为值,您必须通过引用或指针传递它。 这是因为Document无法复制。

我建议在你的情况下使用这个函数声明:

std::string json_to_string(const rapidjson::Document& jmsg)