不能将struct作为类型来创建结构的2D数组

deg*_*egs 1 rust

我正在尝试创建一个简单的,固定大小的节点结构的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)

我错过了什么?

DK.*_*DK. 5

这模糊地类似于说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)