2015-03-31 4 views
0

rapidjson::Document результаты копирования на ошибки связи:Почему ошибка компоновщика, но не компилируется при копировании quickjson :: 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::Document является дочерним rapidjson::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 объявлен, но не определены «. Текст, который вы видите, по-своему гораздо более конкретный, но, очевидно, сложнее читать.

В вашем коде (вероятно, что-то с помощью quickjson) существует случайный или преднамеренный вызов конструктора копирования для GenericDocument, который вызывает всю эту проблему для вас. В моем случае я передавал GenericDocument в функцию в качестве параметра. Если вы делаете то же самое, вы должны передать документ по ссылке, чтобы он не был скопирован.

0

ошибка означает, что функция объявлена, но кто не реализован. Итак, у вас должно быть somes .h, которые объявляют некоторые функции, но не реализованы нигде в том, что у вас есть в Rapidjson.

+0

Но если конструктор копирования является закрытым и не реализован, почему я не получаю ошибку компиляции? На самом деле это мой вопрос. – Narek

+0

@Narek, который может указывать на то, что в некотором собственном коде класса используется конструктор копирования. Или ошибка компилятора. –

 Смежные вопросы

  • Нет связанных вопросов^_^