tutorial remove c++ visual-c++ visual-studio-2012 rapidjson

c++ - remove - LNK2019: "Símbolo externo sin resolver" con rapidjson



json c++ tutorial (1)

Al jsonObj el error, parece que la función que devuelve jsonObj está realizando una especie de copia o movimiento de construcción como parte de la devolución del valor y las clases subyacentes no lo permiten, probablemente haciendo que esos constructores sean miembros privados.

Hay clases cuyo diseño requiere que se prohíba una copia o asignación para evitar fugas de memoria o porque los objetos son de tipo singleton y solo se permite una versión del objeto.

Al mirar esta documentación en rapidjson, hay una nota en la sección sobre Semántica de movimiento que puede ser pertinente. Parece que están impidiendo una copia para mejorar el rendimiento.

Tengo un proyecto de Visual C ++ en el que agregué la biblioteca rapidjson, que se ha probado que funciona correctamente. Pero cuando agrego un tipo de rapidjson::Document a la clase anidada, arrojo un error LNK2019 cuando intento compilar. El proyecto es una biblioteca dinámica para crear una DLL.

Estas son las definiciones en mi main.h :

class coreBD { string conn; string proxy; int type; Document test; enum dataBases { Sqlite, SqlServer, None }; string queryBD(string sSQL); string queryHTTP(string sSQL); string httpRequest(string url, string proxy); static string getNow(string format); static string urlEncode(string url); static bool startsWith(string source, string with); public: enum access { dbConn, HTTPProtocol }; //Nested class class jsonObj { string jsonStr; string message; Document doc; //HERE IS THE PROBLEM bool validMsg; public: enum response { FullResponse, SQLResponse }; jsonObj(string json); string getJsonStr(response rType); string getErrorMsg(); bool isValidResponse(); }; coreBD(string connStr, access connType); jsonObj query(string sSQL); void setProxy(string proxy); };

Este es el error:

error LNK1120: 1 external externo sin resolver

error LNK2019: símbolo externo no resuelto "private: __thiscall rapidjson :: GenericValue, clase rapidjson :: MemoryPoolAllocator> :: GenericValue, clase rapidjson :: MemoryPoolAllocator> (clase rapidjson :: GenericValue, clase rapidjson :: MemoryPoolAllocator> const &)" (? ? 0? $ GenericValue @ U? $ UTF8 @ D @ rapidjson @@ V? $ MemoryPoolAllocator @ VCrtAllocator @ rapidjson @@@ 2 @@ rapidjson @@ AAE @ ABV01 @@ Z) referenciado en la función "public: __thiscall rapidjson :: GenericDocument, clase rapidjson :: MemoryPoolAllocator> :: GenericDocument, clase rapidjson :: MemoryPoolAllocator> (clase rapidjson :: GenericDocument, clase rapidjson :: MemoryPoolAllocator> const &) "(?? 0? $ GenericDocument @ U? $ UTF8 @ D @ rapidjson @@ V? $ MemoryPoolAllocator @ VCrtAllocator @ rapidjson @@@ 2 @@ rapidjson @@ QAE @ ABV01 @@ Z)

El error desaparece cuando comento la línea comentada con AQUÍ ES EL PROBLEMA en el código. Como puede ver, el uso de la variable de test en la clase coreBD no causa ningún error. La mera existencia de la variable de tipo rapidjson::Document en la clase anidada hace que se muestre el error; no importa si lo uso o no.

¿Cual podría ser el problema?

EDITAR :

Nueva información recopilada.

El problema aparece cuando utilizo la clase anidada dentro del padre, pero solo en la return de un método. En otras palabras: puedo crear todo con rapidjson::Document Tipo de rapidjson::Document como variable miembro, puedo crear un método en coreBD class con tipo jsonObj , puedo instanciar jsonObj dentro de esos métodos, pero no puedo devolver un valor de tipo jsonObj si el class jsonObj tiene una variable de miembro de rapidjson::Document declarada.

Por ejemplo, este nuevo método creado:

jsonObj coreBD::testOBJ() { string json = "{error:null, message:None, errorMessage:MoreNone}"; jsonObj b(json); return b; //It fails here if I return a nested class with a rapidjson::Document in it. Returning NULL works }

EDITAR :

Nueva pregunta que continúa resolviendo esto: Realice una copia del objeto Document of rapidjson