C++使用vector作函数参数报no match for operator[]错误如何解决
错误根因
你遇到的no match for operator[]错误核心原因是kardexop函数的参数类型错误:
你当前参数声明为单个kardex类型对象,该类型是你自定义的结构体,本身没有重载[]运算符,自然无法通过下标访问的方式取第item_actual个元素。
修复步骤
- 第一步:修改
kardexop函数的参数类型,替换为你实际要使用的std::vector<kardex>,且需要加引用符号&,否则函数内修改的只是vector的拷贝,不会同步到主函数的原数据:
// 修复前 int kardexop(kardex kardexinfo, int item_actual) // 修复后 int kardexop(std::vector<kardex>& kardexinfo, int item_actual)
- 第二步:修正其他隐含语法问题避免后续报错:
- 你当前用
%s读取tip_mov字段,如果该字段是char类型,应该换用%c格式符,否则会发生内存越界;如果tip_mov是字符串类型,不能直接用switch匹配单个字符,需要改用strcmp函数比较字符串。 - 代码中
kardexinfo[i].ingreso.codigo[10]存在数组越界风险,如果codigo是长度为10的字符数组,合法下标范围是0~9。 - 两个结构体的
codigo字段如果是字符数组,不能直接用==比较,同样需要用strcmp函数判断是否相等。
- 你当前用
修复后核心代码示例
int kardexop(std::vector<kardex>& kardexinfo, int item_actual){ // 如果tip_mov是字符串类型,替换switch为if判断 if(strcmp(kardexinfo[item_actual].tip_mov, "I") == 0){ printf("ingrese la cantidad del items:\n"); scanf("%d",&kardexinfo[item_actual].ingreso.cantidad); for (int cont=0;cont<item_actual;cont++) { // 字符串比较用strcmp if (strcmp(kardexinfo[cont].ingreso.codigo, kardexinfo[item_actual].ingreso.codigo) == 0) { kardexinfo[item_actual].saldo += kardexinfo[cont].saldo + kardexinfo[item_actual].ingreso.cantidad; } } kardexinfo[item_actual].costo = kardexinfo[item_actual].saldo*kardexinfo[item_actual].ingreso.precio; kardexinfo[item_actual].saldo += kardexinfo[item_actual].ingreso.cantidad; } // 其他分支逻辑 return 0; }
内容的提问来源于stack exchange,提问作者Jordy Viscaino
相关产品推荐
相关产品推荐

