繁体   English   中英

为什么复制rapidjson :: Document时链接器错误但未编译错误?

Why linker error but not compile error when copying rapidjson::Document?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

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

错误5错误LNK2019:无法解析的外部符号“私有:__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,类别Rapidjson :: MemoryPoolAllocator> :: GenericDocument,类别Rapidjson :: MemoryPoolAllocator>(类别Rapidjson :: GenericDocument,类别Rapidjson :: MemoryPoolAllocator> const&)“(?? 0?$ GenericDocument @ U?$ UTF8 @ D @ rapidjson @@ V?$ MemoryPoolAllocator @ VCrtAllocator @ rapidjson @@@ 2 @@ rapidjson @@ QAE @ ABV01 @@ Z)C:\\ Layer.obj

我看到了rapidjson::Documentrapidjson::GenericValue ,它没有副本构造函数:

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

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

我使用MVC 2013和Rapidjson 0.11 这里也是类似的线程:

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

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

    //! 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作为参数传递给函数。 如果您做的是相同的事情,则应通过引用传递文档,因此该文档不会被复制。

该错误表示已声明一个函数,但尚未实现。 因此,您必须有一些.h声明了一些函数,但是在您的Rapidjson中没有任何实现。

2 使用Rapidjson :: Document作为指针错误

我有一个作为指针的类变量Rapidjson :: Document。 我在ParseStream中使用此指针时遇到麻烦。 我找不到为文档变量使用指针的任何示例。 也许其他人很幸运使用它作为指针而不是引用? 我在编译错误方面遇到麻烦/看到了什么问题。 我只能这样编译它: 如 ...

4 我有链接或编译错误

我正在为我的C ++项目使用Netbeans。 我使用make编译程序,并遇到以下错误: 而当我在linux环境(准确地说是Ubuntu)中编译它时,它编译良好。 可能出了什么问题? 这是我输入make -n时得到的: PS我更喜欢使用Netbeans ...

6 链接器C编译错误

我正在尝试编译一些C代码并遇到错误: 信息:Internal Builder用于构建gcc -o Test2.exe“ src \\ Test2.o” c:/ mingw / bin /../ lib / gcc / mingw32 / 4.8.1 /../../../ ../ming ...

7 链接Bullet物理时编译错误

我已经下载了子弹物理库,并使用CMake进行了默认设置来为其创建Code :: Blocks项目并构建了它。 然后,我将lib文件夹添加到库路径,并将src文件夹添加到包含路径。 当我使用-lBulletCollision -lBulletDynamics -lLinearMath编译项目时 ...

8 Rapidjson无法复制`rapidjson :: Document`

我需要一个构造rapidjson::Document并返回的函数。 但是当我用这个原型编写一个函数时: 我收到此错误: 似乎没有复制构造函数。 我怎么解决这个问题? 顺便说一句,当我使用Eclipse作为Android本机代码编译它时,它便可以编译并正常工作。 我在Win ...

10 “变量声明但未使用”编译错误

我正在学习谷歌的新语言Go 。 我只是在尝试一些东西,我注意到如果你声明一个变量并且不对它做任何事情,go 编译器(在我的例子中是8g )将无法编译时出现此错误: hello.go:9: error declared and not used 。 我对此感到惊讶,因为大多数语言编译器只是警告您未使用 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM