我有一个 Visual C++ 项目,我在其中添加了 rapidjson 库,该库经过测试可以正常工作。但是当我rapidjson::Document
向嵌套类添加类型时,LNK2019
当我尝试编译时会引发错误。该项目是用于创建 DLL 的动态库。
这是我的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);
};
这是错误:
错误 LNK1120:1 未解决的外部
错误 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,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)
当我评论代码中用HERE IS THE PROBLEM注释的行时,错误消失了。如您所见,在类中使用test
变量coreBD
不会导致错误。嵌套类中仅存在类型变量rapidjson::Document
会导致显示错误;我是否使用它并不重要。
可能是什么问题呢?
编辑:
收集到的新信息。
当我在父类中使用嵌套类时会出现问题,但仅在return
方法中。换句话说:我可以用rapidjson::Document
type 作为成员变量来创建所有东西,我可以在coreBD
class 中用 type创建一个方法,我可以在该方法jsonObj
中实例化,但是如果类声明了一个成员变量,我就不能返回 type 的值。jsonObj
jsonObj
jsonObj
rapidjson::Document
例如这个新创建的方法:
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
}
编辑:
继续解决此问题的新问题:执行 rapidjson 的 Document 对象的副本