0

rapidjson::Document将结果复制到链接错误:

错误 5 错误 LNK2019:无法解析的外部符号“private: __thiscall rapidjson::GenericValue,class rapidjson::MemoryPoolAllocator >::GenericValue,class rapidjson::MemoryPoolAllocator >(class rapidjson::GenericValue,class rapidjson::MemoryPoolAllocator > const &)” (??0?$GenericValue@U?$UTF8@D@rapidjson@@V?$MemoryPoolAllocator@VCrtAllocator@rapidjson@@@2@@rapidjson@@AAE@ABV01@@Z) 在函数“public: __thiscall rapidjson”中引用::GenericDocument,class rapidjson::MemoryPoolAllocator >::GenericDocument,class rapidjson::MemoryPoolAllocator >(class rapidjson::GenericDocument,class rapidjson::MemoryPoolAllocator > const &)" (??0?$GenericDocument@U?$UTF8@ D@rapidjson@@V?$MemoryPoolAllocator@VCrtAllocator@rapidjson@@@2@@rapidjson@@QAE@ABV01@@Z) C:\Layer.obj

我看到这rapidjson::Document是一个rapidjson::GenericValue 没有复制构造函数的孩子:

    //! Copy constructor is not permitted.
private:
    GenericValue(const GenericValue& rhs);

我想知道为什么没有编译器错误而是链接器错误?C++ 试图做什么?

我使用 MVC 2013 和rapidjson 0.11。这里还有类似的线程:

  1. LNK2019:带有 rapidjson 的“未解析的外部符号”
  2. Rapidjson 无法复制 `rapidjson::Document`
4

2 回答 2

1

您已经部分回答了自己的问题:

    //! Copy constructor is not permitted.
private:
    GenericValue(const GenericValue& rhs);

所有类都有一个隐式复制构造函数: http ://en.cppreference.com/w/cpp/language/copy_constructor#Implicitly-declared_copy_constructor

这段代码的作者试图通过在没有定义的情况下声明隐式复制构造函数来禁用它。通过声明,此代码可以编译。没有定义,它就无法链接,因此您会看到错误。

更具体地说,您看到的错误消息翻译如下:“GenericDocument 类的隐式复制构造函数正在调用 GenericValue 类的隐式复制构造函数。GenericValue 类中的复制构造函数已声明但未定义。” 您看到的文本以自己的方式更加具体,但显然更难阅读。

在您的代码(可能是使用 rapidjson 的代码)中,存在对 GenericDocument 的复制构造函数的意外或故意调用,这给您带来了整个问题。就我而言,我将 GenericDocument 作为参数传递给函数。如果你在做同样的事情,你应该通过引用传递文档,所以它不会被复制。

于 2015-08-06T22:16:38.807 回答
0

该错误意味着声明了一个函数但未实现。所以你必须有一些 .h 来声明一些函数,但在你所拥有的 Rapidjson 的任何地方都没有实现。

于 2015-03-31T08:00:10.613 回答