2015-03-31 84 views
0

rapidjson::Document副本結果鏈接錯誤:複製rapidjson :: Document時爲什麼鏈接器錯誤但不編譯錯誤?

Error 5 error LNK2019: unresolved external symbol "private: __thiscall rapidjson::GenericValue,class rapidjson::MemoryPoolAllocator >::GenericValue,class rapidjson::MemoryPoolAllocator >(class rapidjson::GenericValue,class rapidjson::MemoryPoolAllocator > const &)" ([email protected][email protected]@[email protected]@[email protected]@[email protected]@@[email protected]@[email protected]@[email protected]@@Z) referenced in function "public: __thiscall rapidjson::GenericDocument,class rapidjson::MemoryPoolAllocator >::GenericDocument,class rapidjson::MemoryPoolAllocator >(class rapidjson::GenericDocument,class rapidjson::MemoryPoolAllocator > const &)" ([email protected][email protected]@[email protected]@[email protected]@[email protected]@@[email protected]@[email protected]@[email protected]@@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: "Unresolved external symbol" with rapidjson
  2. Rapidjson cannot copy `rapidjson::Document`

回答

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作爲參數傳遞給函數。如果你正在做同樣的事情,你應該通過引用傳遞文檔,所以它不會被複制。

0

錯誤意味着有聲明的功能,但誰是沒有實現。 所以你必須有一些.h聲明一些函數,但沒有在Rapidjson的任何地方實現。

+0

但如果複製構造函數是私人的,並沒有實現,爲什麼我不會收到編譯錯誤?這實際上是我的問題。 – Narek 2015-03-31 08:25:12

+0

@Narek可能表示某些類自己的代碼使用了複製構造函數。或者一個編譯器錯誤。 – 2015-08-06 23:21:30