You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)
  • 第二步:修正其他隐含语法问题避免后续报错:
    1. 你当前用%s读取tip_mov字段,如果该字段是char类型,应该换用%c格式符,否则会发生内存越界;如果tip_mov是字符串类型,不能直接用switch匹配单个字符,需要改用strcmp函数比较字符串。
    2. 代码中kardexinfo[i].ingreso.codigo[10]存在数组越界风险,如果codigo是长度为10的字符数组,合法下标范围是0~9。
    3. 两个结构体的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 03:21:04