Qt5文件分析中出现QVector<int>与QCharRef的operator[]不匹配错误
解决Qt5中
QVector<int>与QCharRef的operator[]不匹配错误 嘿,这个错误我之前踩过一模一样的坑!咱们先把这个报错拆明白:error: no match for ‘operator[]’ (operand types are ‘QVector<int>’ and ‘QCharRef’),核心问题就是你用了QChar类型的值去索引QVector
错误场景还原
我猜你大概率写了类似这样的代码:
QVector<QString> File; // 存储文件每行内容的容器 QVector<int> counter; // 存储分析结果的容器 // 遍历文件内容时的出错代码 for (int i = 0; i < File.size(); ++i) { QString currentLine = File[i]; for (int j = 0; j < currentLine.size(); ++j) { // 这里就是报错的根源!currentLine[j]返回的是QCharRef,不是int counter[currentLine[j]]++; } }
为啥会错?因为currentLine[j]是对QString的下标访问,返回的是QCharRef(本质是QChar的引用类型),而QVector<int>的operator[]只接受int类型的索引参数,Qt找不到能把QCharRef直接转成int的匹配重载,所以就抛出了这个错误。
针对性解决办法
根据你的分析需求,分两种情况处理:
- 如果是统计字符的Unicode/ASCII码值:直接用
QChar::unicode()方法把字符转成对应的整数码点,或者强制类型转换为int// 修正后的代码示例 counter[currentLine[j].unicode()]++; // 或者用强制转换 counter[static_cast<int>(currentLine[j])]++; - 如果是把字符形式的数字(比如'0'-'9')转成整数数字:需要减去字符'0'的ASCII值,得到对应的整数
// 比如字符'7'转成整数7 counter[currentLine[j].unicode() - '0']++;
另外要注意:一定要提前确保counter的容量足够容纳你要访问的索引值!比如统计ASCII字符的话,最好初始化counter为大小256的容器,每个元素默认值设为0,避免越界访问的问题。
内容的提问来源于stack exchange,提问作者Lorenzo
相关产品推荐
相关产品推荐

