与'operator[]'不匹配(操作数类型为 'QVariant' 和"常量字符 [2]") QVariant/QVariantMap
no match for 'operator[]' (operand types are 'QVariant' and 'const char [2]') QVariant/QVariantMap
我试图在 qt 5.1 中为 json 创建一个包装类,我正在研究一个函数,该函数将检查输入的 var 是 QVariantMap 还是只是一个 QVariant,一切都运行良好,直到我进入 muli dimen 数组的第二级。 这是我的数组结构和类代码。
JsonHelper jh;
QVariantMap obj = jh.getJsonObjectVarientMap(data);
这给我带来了问题,当我只使用"obj"或"obj["1"]"时没有问题,只有当我
// obj["4"]["3"] this causes the problems
qDebug() << "Your returned val is : " << jh.keySearchVal(obj["4"]["3"],arr_index_txt);
QMap<QString,QVariant> mp = obj["4"].toMap();
foreach(QString key,mp.keys())
{
// this works ok
qDebug() << "key : " << key << " : val : " << mp[key];
}
QVariantMap JsonHelper::getJsonObjectVarientMap(QString in)
{
QJsonDocument d = QJsonDocument::fromJson(in.toUtf8());
return d.object().toVariantMap();
}
QVariant JsonHelper::keySearchVal(QVariant source, QString key)
{
QString type(source.typeName());
if(type=="QVariantMap")
{
QMap<QString, QVariant> map = source.toMap();
foreach(QString key_inner,map.keys())
{
QVariant in = map[key_inner];
if(key_inner==key)
{
return getVariantVal(in);
}
}
}
return "";
}
QVariant JsonHelper::keySearchVal(QVariantMap source, QString key)
{
foreach(QString key_inner,source.keys())
{
if(key_inner==key)
{
return source[key_inner];
}
}
return "";
}
QVariant JsonHelper::getVariantVal(QVariant in)
{
qDebug() << "from variant";
QString type(in.typeName());
if(type=="QVariantMap")
{
return in.toMap();
}
return in;
}
obj["4"]["3"] 这会导致问题
这是无效的QVariant
因为它没有运算符 [] 重载。这也是编译器试图告诉你的:
与"运算符[]"不匹配(操作数类型为"QVariant"和"const char [2]") QVariant/QVariantMap
您需要将任何嵌套的 QVariant 显式转换为 QVariantMap(如果这是基础数据类型)。有关详细信息,请参阅以下方法:
QMap QVariant::toMap() const
如果变体具有 type() QMetaType::QVariantMap,则以 QMap 形式返回该变体;否则返回空映射。
这不是重点,但您还有两个问题:
-
您似乎使用"变体"一词而不是"变体"。
-
您的代码缺少针对转化等的错误检查和报告。
相关文章:
- #定义c-预处理器常量..我做错了什么
- 用C++中的一个变量定义一个常量
- 什么时候在C++中返回常量引用是个好主意
- 代理对象的常量正确性
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 通过多个头文件使用常量变量
- 在cuda线程之间共享大量常量数据
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 是默认情况下分配给char数组常量的值
- 私有类型的静态常量成员
- 类似枚举的计算常量
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 为什么我可以通过引用修改常量返回
- 如何创建长度由常量参数指定的数组
- 当一个值是非常量但用常量表达式初始化时使用constexpr
- 返回常量对象引用 (getter) 和仅返回字符串有什么区别?
- 隐式常量/非常量运算符布尔
- 与'operator[]'不匹配(操作数类型为 'QVariant' 和"常量字符 [2]") QVariant/QVariantMap
- 从QCombobox检索值失败-将QVariant强制转换为常量指针