c++ - rapidjson::std::pair 中的文档

标签 c++ cocos2d-x linker-errors std-pair rapidjson

我收到这个错误:

Undefined symbols for architecture i386:
rapidjson::GenericValue<rapidjson::UTF8<char>, rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator> >::GenericValue(rapidjson::GenericValue<rapidjson::UTF8<char>, rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator> > const&)

当我尝试成对返回 rapidjson::Document 时,这个错误跳到我身上:

typedef std::pair<rapidjson::Document, std::string> ProcessedResponseResult;

ProcessedResponseResult ProcessResponse(HttpResponse* response)
{
    rapidjson::Document jsonDoc;
    ...
    return ProcessedResponseResult(jsonDoc, std::string());
}

如果有帮助的话,rapidjson 是一个只有头文件的库。

为什么我不能返回?

最佳答案

当你构造一个ProcessedResponseResult时,它会调用rapidjson::Document的拷贝构造函数,但是在rapidjason/document.h文件中>,为了防止复制 rapidjson::Document 对象,它声明了一个私有(private)复制构造函数,但没有实现它,所以这会导致链接器错误。

//! Copy constructor is not permitted.
private:
    GenericValue(const GenericValue& rhs);

如果您使用 std::pair 的原因只是为了从函数返回 2 个值,我建议通过引用传递 jsonDoc

关于c++ - rapidjson::std::pair 中的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22907480/

相关文章:

c++ - 为什么 C++ 模板数组长度推导需要类似于 "f(T (&a)[N]"?

c++ - 在c++中,当我经常使用多级指针时,使用typedef来简化它是不是一个好方法?

ios - Sprite 完成 Action 时调用带有 3 个参数的函数

c - 如何在编译时链接Libb64库?

ios - 如何避免iOS项目重复符号链接(symbolic link)错误?

c++ - 如果基类构造函数不是 constexpr,我能否使派生类的构造函数为 constexpr?

ios - 在 cocos2d 中停止 Sprite 动画

c++ - 代码无法使用 Android NDK 编译

c++ - 什么是 undefined reference /未解析的外部符号错误,我该如何解决?

c++ - Simulink "Access Violation"写入 C++ lambda 函数捕获列表中的 PWork 变量