【发布时间】:2014-05-06 03:00:24
【问题描述】:
我有一个 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 注释的行时,错误消失。如您所见,在coreBD 类中使用test 变量不会导致错误。嵌套类中仅存在rapidjson::Document 类型的变量会导致显示错误;用不用都无所谓。
可能是什么问题?
编辑:
收集到的新信息。
当我在父类中使用嵌套类时会出现问题,但仅限于方法的return。换句话说:我可以使用rapidjson::Document 类型作为成员变量创建所有内容,我可以在coreBD 类中创建一个jsonObj 类型的方法,我可以在该方法中实例化jsonObj,但我不能如果类jsonObj 声明了rapidjson::Document 成员变量,则返回jsonObj 类型的值。
例如这个新创建的方法:
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
}
编辑:
新问题继续解决这个问题:Perform a copy of Document object of rapidjson
【问题讨论】:
-
添加 rapidjason 的库文件作为对项目属性的引用。
-
@Trinity rapidjson 只是标题,它们包含在我的项目中,
#includes,正如您所读到的,该库在我项目的所有其他部分都正常工作 -
这是一个单独的解决方案吗?这意味着您的应用程序的其他工作部分被放置在您项目的不同解决方案中。
-
@XAMlMAX 不。一种独特的解决方案。如果这很重要,我也有一个 C++/CLI 包装器。该项目是一个动态库。
-
您是否在项目中的其他任何地方使用此
rapidjson::Document?我知道您说它在解决方案中的其他任何地方都可以使用,但rapidjson::Document是否也可以在其他任何地方使用?
标签: c++ visual-c++ visual-studio-2012 rapidjson