在调用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::UTF8<char>, rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator> >::GenericValue(std::basic_string<char, std::char_traits<char>, std::allocator<char> >&)'
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);