【常见问题】C++编译报错:没有与这些操作数匹配的 “[]“ 运算符
·
描述
记录一个不是很好解决的C++报错,源代码如下:
string GTConfig::GetClientConfig(const string& item) const {
if (mapClientConfig.find(item) == mapClientConfig.end()) {
return string();
}
return mapClientConfig[item]; // 报错:没有与这些操作数匹配的 "[]" 运算符
return mapServerConfig.find(item)->second; // 正确
}
编译报错如下:
上面这段代码比较简单,实现的就是从一个map中查找一个key,如果找到就返回对应的内容,如果没有找到,则返回空字符串。
分析
这边报错其实有两个原因:
1) 一个新手容易忽略的问题
首先,在这边还有一个新手容易忽略的问题(PS:我也是个新手😆)
如果只考虑,return mapClientConfig[item]
这个语句,这个语句的作用执行后有两种情况:
情况1: mapClientConfig字典中存在item的key,则返回mapClientConfig[item];
情况2: mapClientConfig字典中不存在item的key,则先在mapClientConfig中创建item的key,并给mapClientConfig[item]赋上默认值;
也就是说,即便不存在key,也不会报错,而是新建一个key并赋默认值
2) const限制符
再有一个就是我们的函数中用了const限制符,结合上面的 mapClientConfig[item]
的语句是一个能改变变量值的语句,所以在这里才会报错。
解决方法
使用return mapServerConfig.find(item)->second;
语句替代 return mapClientConfig[item]
的语句
更多推荐
所有评论(0)