rapidjson使用编译报错问题解决

在调用AddMember把std::string类型值直接作为下面的v传入时,必须定义宏RAPIDJSON_HAS_STDSTRING
#define OBJ_ADD_STR_MEMBER(obj,k, v)    do {obj.AddMember(k, v, allocator);} while (0)  // this won't work for std::string, unless you define "RAPIDJSON_HAS_STDSTRING" in your Makefile

例如,下面的代码一直编译报错:
CCarProvinceCityFenceBo.cpp:509:   instantiated from here
/usr/local/include/rapidjson/document.h:1060: error: no matching function for call to 'rapidjson::GenericValue, rapidjson::MemoryPoolAllocator >::GenericValue(std::basic_string, std::allocator >&)'


const std::string & provinceID = itProvinceInfoMap->first;
rapidjson::Value province(kObjectType);
OBJ_ADD_STR_MEMBER(province, "provinceID", provinceID);

通过在scons文件中增加宏定义RAPIDJSON_HAS_STDSTRING,解决了这个编译问题
env.Append(CPPDEFINES = [ 'RAPIDJSON_HAS_STDSTRING'])

或者不定义宏 RAPIDJSON_HAS_STDSTRING,改用如下方式,也能解决
            const std::string & provinceID = itProvinceInfoMap->first;
            rapidjson::Value province(rapidjson::kObjectType);
            rapidjson::Value val;
            item.AddMember("provinceID", val.SetString(provinceID.c_str(), allocator), allocator);

你可能感兴趣的:(rapidjson)