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

Rust类型不匹配错误求助:expected `usize`, found `i64`

解决Rust中类型不匹配(usize vs i64)的问题

这问题我之前也碰到过,咱们一步步拆解解决:

你的代码

fn main() { 
    let mut a: Vec<i64> = Vec::new(); 
    let n = 42; 
    a.push(n); 
    let i = 0; 
    a[i]; 
    let j = n; 
    i == j; 
}

报错信息

error[E0308]: mismatched types
--> src/main.rs:4:10
| 4 | i == j;
| ^ expected usize, found i64

问题核心

Rust是强类型语言,不同数字类型不能直接比较。这里的矛盾点很明确:

  • let i = 0; 没有指定类型,但你用它作为Vec的索引,Rust会自动把i推断为usize(Vec的索引必须是这个类型,对应系统的指针宽度)
  • let j = n; 而n被推断为i64(因为你把它push到了Vec<i64>里),所以j也是i64类型

两边类型不统一,编译器自然会报错。

两种修复方案

根据你的实际业务需求,选一种就行:

方案1:把j转换成usize类型

如果你希望j和i一样作为索引使用,直接显式转换类型:

fn main() { 
    let mut a: Vec<i64> = Vec::new(); 
    let n = 42; 
    a.push(n); 
    let i = 0; 
    a[i]; 
    let j: usize = n as usize; // 这里把i64转成usize
    i == j; 
}

⚠️ 注意:如果n是负数,转usize会触发溢出错误,但你的例子里n=42是正数,完全没问题。

方案2:把i设为i64,访问Vec时临时转usize

如果你需要i保持i64类型,那访问Vec的时候临时转换索引类型,这样比较时两边都是i64:

fn main() { 
    let mut a: Vec<i64> = Vec::new(); 
    let n = 42; 
    a.push(n); 
    let i: i64 = 0; // 显式指定i为i64
    a[i as usize]; // 访问Vec时转成usize索引
    let j = n; 
    i == j; // 现在类型统一,可正常比较
}

内容的提问来源于stack exchange,提问作者Shisui Uchiha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:24:31