C++ map索引非整数错误:如何正确获取Task*类型值?
解决map指针的元素访问错误
嘿,这个问题其实是因为你没正确处理threadMap是指针这件事,我来一步步给你讲清楚怎么改:
首先看报错的那行:Task* t= this->threadMap["fkjk"];
你的threadMap是map<string, Task*>*类型(也就是指向map的指针),直接用this->threadMap["key"]相当于试图把指针当作数组来用,而数组下标要求是整数,这就导致了编译器报错“array index is not integer”。
正确的访问方式有两种:
1. 先解引用指针,再用[]操作符
把指针转换成map的引用,然后再用熟悉的[]来访问元素:
// 先解引用threadMap指针,再使用[] Task* t = (*this->threadMap)["fkjk"];
不过要注意:map的[]操作符如果找不到对应的key,会自动插入一个默认构造的Task*(也就是nullptr)到map里,如果你不想意外修改map,这种方式要谨慎用。
2. 使用find()方法(更安全推荐)
用指针的箭头操作符调用map的find()方法,找到对应key的迭代器,然后判断是否存在,再获取值:
// 用find查找key,返回迭代器 auto it = this->threadMap->find("fkjk"); if (it != this->threadMap->end()) { // 迭代器的second就是对应的Task* Task* t = it->second; // 这里可以对t进行后续操作 } else { // 处理key不存在的情况,比如打印错误或者返回提示 }
这种方式不会在找不到key的时候修改map,更安全。
顺便提一下你代码里的另一个小问题
在if(threadMap->count(&args.at(1)) ==1)这行,你传的是&args.at(1)(string的地址),但你的map的key是string类型,应该直接传args.at(1),不然永远匹配不到对应的key,改成:
if(threadMap->count(args.at(1)) == 1)
内容的提问来源于stack exchange,提问作者orah1998
相关产品推荐
相关产品推荐

