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::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);

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值