往Linux移植json代码出现错误
#include <json/json.h>
void DBServerCommand::parseJson(const std::string& strJson)
{
Json::Reader reader;
Json::Value json_object;
if (!reader.parse(strJson,json_object))
setIsValid(false);
else
{
std::stringstream ustream;
ustream<<json_object["success"];
ustream>>m_uSuccess;
m_strSid = json_object["sid"].asString();
m_strSqlCount=json_object["sqlcount"].asString();
m_strSType=json_object["stype"].asString();
m_strSIP=json_object["sip"].asString();
m_strSDB=json_object["sdb"].asString();
m_strSTB=json_object["stb"].asString();
for(size_t i=0;i<json_object["value"].size();i++)
{
addSqlValuePair(json_object["value"][i]["optype"].asString(),json_object["value"][i]["sqlvalue"].asString());}
setIsValid(true);
}
}
[root@HX CGIFromFirtex]# make -f Makefilesingle
g++ -I include -I include/oci -I include/firtex/extension/external -I src/external/iconv -I mongodb -I mongodb/client -I mongodb/third_party/pcre-7.4 -c DBServerCommand.cpp
DBServerCommand.cpp: In member function ‘virtual void DBServerCommand::parseJson(const std::string&)’:
DBServerCommand.cpp:25: 错误:ambiguous overload 为‘operator[]’在‘json_object.Json::Value::operator[](((const char*)"value"))[i]’中
include/json/value.h:316: 附注:备选为: Json::Value& Json::Value::operator[](Json::Value::ArrayIndex)
include/json/value.h:323: 附注: Json::Value& Json::Value::operator[](int)
include/json/value.h:328: 附注: const Json::Value& Json::Value::operator[](Json::Value::ArrayIndex) const
include/json/value.h:333: 附注: const Json::Value& Json::Value::operator[](int) const
include/json/value.h:347: 附注: Json::Value& Json::Value::operator[](const char*) <就近匹配>
include/json/value.h:349: 附注: const Json::Value& Json::Value::operator[](const char*) const <就近匹配>
include/json/value.h:351: 附注: Json::Value& Json::Value::operator[](const std::string&) <就近匹配>
include/json/value.h:353: 附注: const Json::Value& Json::Value::operator[](const std::string&) const <就近匹配>
DBServerCommand.cpp:25: 错误:ambiguous overload 为‘operator[]’在‘json_object.Json::Value::operator[](((const char*)"value"))[i]’中
include/json/value.h:316: 附注:备选为: Json::Value& Json::Value::operator[](Json::Value::ArrayIndex)
include/json/value.h:323: 附注: Json::Value& Json::Value::operator[](int)
include/json/value.h:328: 附注: const Json::Value& Json::Value::operator[](Json::Value::ArrayIndex) const
include/json/value.h:333: 附注: const Json::Value& Json::Value::operator[](int) const
include/json/value.h:347: 附注: Json::Value& Json::Value::operator[](const char*) <就近匹配>
include/json/value.h:349: 附注: const Json::Value& Json::Value::operator[](const char*) const <就近匹配>
include/json/value.h:351: 附注: Json::Value& Json::Value::operator[](const std::string&) <就近匹配>
include/json/value.h:353: 附注: const Json::Value& Json::Value::operator[](const std::string&) const <就近匹配>
make: *** [DBServerCommand.o] 错误 1
[解决办法]
operator[] 多义性,
你看看
[解决办法]
楼主,我来接分了。。80分,谢谢。
原因很明显,你用了size_t i,
for(size_t i=0;i<json_object["value"].size();i++)
{
addSqlValuePair(json_object["value"][i]["optype"].asString(),json_object["value"][i]["sqlvalue"].asString());
}
json_object["value"][i]这里有错误,
备选的函数是 int,或者Json::Value::ArrayIndex (网上略微搜索了一下是unsigned int的typedef):
Json::Value& Json::Value::operator[](Json::Value::ArrayIndex)
Json::Value& Json::Value::operator[](int)
你有一个size_t i,备选是int或者Json::Value::ArrayIndex. 因为std::size_t是c++标准规定的,std::size_t可能对不同的编译器不同,对windows下,可能就是unsigned int,但是在linux下可能是unsigned long (我没试过,楼主可以验证一下)。
不管怎样,这个函数重载有问题了。找不到最匹配的。
或者你用int i,或者你用Json::Value::ArrayIndex i,取决于你要用哪个函数。
[解决办法]
刚查了一下,linux下
std::size_t是unsigned long。
所以你的问题是,提供的参数是unsigned long,可选的函数重载是,
int和unsigned int。
从unsigned long到int和unsigned int都需要整数转换,属于相同的转换等级。
重载是ambigous的。
[解决办法]
ambiguous
csdn不能编辑真是扯淡。stackoverflow在发完几分钟之内还可以编辑。
[解决办法]
学会看错误提示。从这错误提示里,基本上也能猜出是什么错误了