gpt4 book ai didi

c++ - LNK2019 : "Unresolved external symbol" with rapidjson

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:23:23 25 4
gpt4 key购买 nike

我有一个 Visual C++ 项目,我在其中添加了 rapidjson 库,经测试可以正常工作。但是,当我将 rapidjson::Document 类型添加到嵌套类时,在我尝试编译时会抛出 LNK2019 错误。该项目是创建动态库的动态库。

这是我的 ma​​in.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);
};

这是错误:

error LNK1120: 1 unresolved externals

error LNK2019: unresolved external symbol "private: __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) referenced in function "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 类型变量的存在会导致 de error 显示;用不用都无所谓。

可能是什么问题?


编辑:

收集到新信息。

当我在父类中使用嵌套类时出现问题,但仅在方法的 return 中出现。换句话说:我可以用 rapidjson::Document 类型创建所有东西作为成员变量,我可以在 coreBD 类中用类型 jsonObj 创建一个方法>,我可以在该方法中实例化 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
}

编辑:

继续解决此问题的新问题:Perform a copy of Document object of rapidjson

最佳答案

查看错误,似乎返回 jsonObj 的函数正在执行某种复制或移动构造,作为返回值的一部分,而底层类可能不允许这样做那些构造函数的私有(private)成员。

有些类的设计要求禁止复制或赋值,以防止内存泄漏,或者因为对象是单例类型对象并且只允许对象的一个​​版本。

看着这个documentation on rapidjson在 Move 语义部分中有一个注释可能是相关的。看起来他们正在阻止复制以提高性能。

关于c++ - LNK2019 : "Unresolved external symbol" with rapidjson,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22682513/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com