首页 > 代码库 > <转>c++ builder JSONCPP 注意事项 XE2 解决编译问题 _Mfl
<转>c++ builder JSONCPP 注意事项 XE2 解决编译问题 _Mfl
在C++Builder中使用JSONCPP需要注意的问题 1、使用STL的MAP而不是内建的MAP这个问题实际上和编译器无关。内建的MAP不是很稳定,当解析数据大于600K左右时,会崩溃。虽然一般来说JSON的数据大不到哪里去,但不代表数据量小时稳定性就不没有问题,只可能是发生的概率小一些。所以还是使用内建的MAP好一些,测试几兆的数据都没有问题。使用STL MAP的方法是编译时不要定义JSON_VALUE_USE_INTERNAL_MAP变量。2、要在2007中编译通过,需要修改一点代码。之所以会有第一个问题,就是因为直接编译时通不过,又不知道原因在哪里,所以尝试了使用内建的MAP才得以通过。但因为存在问题一,所以只好又回头来解决这个问题了。需要修改的地方:value.h文件中,大概873行的地方:把原来的#ifndef JSON_VALUE_USE_INTERNAL_MAP explicit ValueIteratorBase( const Value::ObjectValues::iterator ¤t );修改为:#ifndef JSON_VALUE_USE_INTERNAL_MAP explicit ValueIteratorBase( const std::map<Value::CZString, Value>::iterator ¤t ); 如果不换成这种笨一点的办法,而是直接象原来那样使用typename,编译器总会报:“[BCC32 Error] map(30): E2089 Identifier ‘_Mfl’ cannot have a type qualifier”错误。当然不是STL map的错。使用排除法找到这个问题,使用死马当做活马医的办法找到解决方案:)颇费一番周折。 另外,JSONCPP开源工程有一段时间没有更新了,不知还会不会长久的维护完善下去。但鉴于JSON.org上推荐的另两个C++实现方案都依赖boost库,只好先暂时用这个实现。实际上JSONCPP的实现还是蛮不错的,数据的解析、生成都是挺方便的。从一些未完成的接口上看(比如PATH相关的),作者也有一些好的想法,只是未来得及实现。 JSONCPP的网站: