Search code examples
c++visual-c++visual-studio-2012rapidjson

Perform a copy of Document object of rapidjson


I'm making a class and I want to return my class inside a method. My class has a rapidjson::Document object.

You can see the previous problems here: LNK2019: "Unresolved external symbol" with rapidjson

As I discovered, rapidjson prevent you to perform any kind of copy of the Document object, and then the default copy of the class containing a Document object failed. I'm trying to define my own Copy Constructor but I need to perform a copy of the object. I saw a way to hypothetically copy the object with .Accept() method, but is returning me a lot of errors inside the rapidjson::Document class:

error C2248: 'cannot access private member declared in class `rapidjson::GenericDocument'

This is my Copy Constructor:

jsonObj::jsonObj(jsonObj& other)
{
    jsonStr = other.jsonStr;
    message = other.message;

    //doc = other.doc;
    doc.Accept(other.doc);

    validMsg = other.validMsg;
}

I found in the code of the library (line 52-54) that "Copy constructor is not permitted".

This is my class:

class jsonObj {
    string jsonStr;
    Document doc; 

public:
    jsonObj(string json);
    jsonObj(jsonObj& other);

    string getJsonStr();
};

The method:

jsonObj 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
}

So how to perform a copy of the Document element?


Solution

  • Repository https://github.com/rjeczalik/rapidjson have the DeepCopy patch which might help you copy one document into another.