C++ 使用RapidJson其AddMember函数的函数的输入出现问题

C++ 使用RapidJson其AddMember函数的函数的输入出现问题,c++,c++11,rapidjson,C++,C++11,Rapidjson,我正在尝试编写一个函数来检查文档中是否存在成员。如果这样做,则应删除该成员并使用其他值重新添加它 这是我到目前为止得到的(d是一个rapidjson::Document): 这将编译并运行,但输出不符合预期: 如图所示,rapidjson::StringRef(成员)似乎是方框内出现问号的原因 阅读这些文档对我帮助不大: 从我读到的内容来看,我应该做得正确,但很可能我没有阅读这些类型文档的经验,这是一个问题。有人知道我做错了什么或遗漏了什么吗?我最终在这篇文章中找到了答案: 使用动态引

我正在尝试编写一个函数来检查文档中是否存在成员。如果这样做,则应删除该成员并使用其他值重新添加它

这是我到目前为止得到的(d是一个
rapidjson::Document
):

这将编译并运行,但输出不符合预期:

如图所示,
rapidjson::StringRef(成员)
似乎是方框内出现问号的原因

阅读这些文档对我帮助不大:


从我读到的内容来看,我应该做得正确,但很可能我没有阅读这些类型文档的经验,这是一个问题。有人知道我做错了什么或遗漏了什么吗?

我最终在这篇文章中找到了答案:

使用动态引用时,字符串的副本应存储在
rapidjson::Value

这使得代码如下所示:

void addMemberWithoutDuplication(std::string member, rapidjson::Value val) {
    if (d.HasMember(member)) {
        d.RemoveMember(member);
    }
    rapidjson::Value key(member.c_str(), allocator);
    d.AddMember(key, val, allocator);
}

StringRef
中的
Ref
在引用局部变量时可疑。尝试通过深度复制添加此成员。不能执行
d[member]=val?@rafix07您能给我举个例子说明如何做到这一点吗。我对C++使用互联网很陌生,我发现在上下文中使用“深度副本”这个词很难得到一个例子。在下面的部分中:移动语义和临时值,并使用代码<值> /Cuffo>类使用。
void addMemberWithoutDuplication(std::string member, rapidjson::Value val) {
    if (d.HasMember(member)) {
        d.RemoveMember(member);
    }
    rapidjson::Value key(member.c_str(), allocator);
    d.AddMember(key, val, allocator);
}