gpt4 book ai didi

rust - 无法将结构作为类型来创建结构的二维数组

转载 作者:行者123 更新时间:2023-11-29 08:10:58 29 4
gpt4 key购买 nike

我正在尝试创建一个简单的、固定大小的 2D 节点结构数组,大小为 [MAX_X, MAX_Y]。这:

let mut map = [[Node; MAX_X as usize]; MAX_Y as usize];

struct Node {
x: i32,
y: i32,
}

给出错误信息:

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 */ }`?

我错过了什么?

最佳答案

这有点类似于说 let mut i = i32;;它没有任何意义,因为您正在尝试将类型分配给变量。您实际上需要提供一个,而不是类型。

但是,即使那样也行不通,因为根据上面的定义,Node 不是 Copy,因此编译器无论如何都无法构造数组。

这里有一些有用的东西,但首先要注意几点:

  • 请注意,这是在堆栈上构造数组。如果它太大,就会有堆栈溢出和崩溃的风险。

  • MAX_XMAX_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];
}

关于rust - 无法将结构作为类型来创建结构的二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31510684/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com