我正在尝试创建一个简单的,固定大小的节点结构的2D数组,其大小为[MAX_X,MAX_Y].这个:
let mut map = [[Node; MAX_X as usize]; MAX_Y as usize];
struct Node {
x: i32,
y: i32,
}
Run Code Online (Sandbox Code Playgroud)
给出错误消息:
main.rs:12:21: 12:25 error: `Node` is a struct variant name, but this expression uses it like a function name [E0423]
main.rs:12 let mut map = [[Node; MAX_X as usize]; MAX_Y as usize];
^~~~
main.rs:12:21: 12:25 help: did you mean to write: `Node { /* fields */ }`?
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
这模糊地类似于说let mut i = i32;; 它没有任何意义,因为你试图为变量分配一个类型.您需要实际提供值,而不是类型.
但是,即使这样也行不通,因为鉴于上面的定义,Node它不是Copy,因此编译器无论如何都无法构造数组.
这是可行的,但首先是一些注意事项:
请注意,这是在堆栈上构建数组.如果你把它做得太大,你就会冒着堆栈溢出和崩溃的风险.
MAX_X并且MAX_Y 必须是常数; 他们不能变数.你的铸造(缺乏一个完整的例子)让我担心你可能正在使用变量..
fn main() {
#[derive(Copy, Clone)]
struct Node {
x: i32,
y: i32,
}
const MAX_X: usize = 8;
const MAX_Y: usize = 16;
let mut map = [[Node { x: 0, y: 0 }; MAX_X]; MAX_Y];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
468 次 |
| 最近记录: |