Rust 如何修复错误E0277:trait绑定“[usize]:std::marker::Sized”不满足?
我正在尝试将数组传递给函数:Rust 如何修复错误E0277:trait绑定“[usize]:std::marker::Sized”不满足?,rust,Rust,我正在尝试将数组传递给函数: fn my_func(xs: [usize]) -> usize { 0 } fn main() { let arr = [329, 457, 657]; let res = my_func(inp); } 我得到一个错误: 错误[E0277]:未满足特征绑定“[usize]:std::marker::Sized” ->src/main.rs:1:12 | 1 | fn我的函数:[usize]->usize{ |^^`[usize]
fn my_func(xs: [usize]) -> usize {
0
}
fn main() {
let arr = [329, 457, 657];
let res = my_func(inp);
}
我得到一个错误:
错误[E0277]:未满足特征绑定“[usize]:std::marker::Sized”
->src/main.rs:1:12
|
1 | fn我的函数:[usize]->usize{
|^^`[usize]`在编译时没有已知的常量大小
|
=help:trait`std::marker::Sized`未为`[usize]实现`
=注意:所有局部变量必须具有静态已知的大小
我知道,但他们似乎不适用于我的简单情况
如何修复错误?您的问题以及a&修复问题的原因是,片在编译时没有已知的大小 有几种解决方案: 使用显式长度
fn foo(arr: [usize; 3]) { }
使用显式长度将告诉编译器数组有多大,现在可以决定为数组保留多少空间
引用
fn foo(arr: &[usize]) { }
一个指向切片的引用实际上是一个胖指针,编译时它的大小取决于您的体系结构,但通常是32/64位
使用堆分配
fn foo(arr: Box<[usize]> { }
长方体是堆分配的元素,实际上是指针,因此大小也是已知的
还有其他容器Rc、Arc等,它们接受未大小的元素。您可以很容易地在源代码中找到它们,因为它们对模板参数有要求。请参阅。您的问题以及a&修复您问题的原因是,切片在编译时没有已知的大小 有几种解决方案: 使用显式长度
fn foo(arr: [usize; 3]) { }
使用显式长度将告诉编译器数组有多大,现在可以决定为数组保留多少空间
引用
fn foo(arr: &[usize]) { }
一个指向切片的引用实际上是一个胖指针,编译时它的大小取决于您的体系结构,但通常是32/64位
使用堆分配
fn foo(arr: Box<[usize]> { }
长方体是堆分配的元素,实际上是指针,因此大小也是已知的
还有其他容器Rc,Arc,…接受一个未大小的元素。您可以在源代码中很容易地找到它们,因为它们对模板参数有要求,请参见
我正在尝试将数组传递给函数
fn my_func(xs: [usize])
这不是一个数组,而是一个切片;这就是问题所在。请阅读
正如其他答案所提到的,根据您的目标,有几种潜在的解决方法:
切片[T]没有大小
数组[T;N]有一个大小
对切片和[T]的引用有一个大小
盒装切片盒有一个尺寸
对数组&[T;N]的引用有一个大小
等等
我正在尝试将数组传递给函数
fn my_func(xs: [usize])
这不是一个数组,而是一个切片;这就是问题所在。请阅读
正如其他答案所提到的,根据您的目标,有几种潜在的解决方法:
切片[T]没有大小
数组[T;N]有一个大小
对切片和[T]的引用有一个大小
盒装切片盒有一个尺寸
对数组&[T;N]的引用有一个大小
等等