Struct 导致借用问题的结构的Vec

Struct 导致借用问题的结构的Vec,struct,rust,Struct,Rust,我正在尝试建立一个分子数据结构。从一个原子开始,一个分子Vec存储所有的Atoms(及其坐标和索引等)。我还想要一个Bondstruct,它将有一对Atomstruct,另一个Vec存储所有的键。我将对角度等做同样的处理 一旦进入结构中,数据就不会发生变化,它只会被用来通过方法计算债券长度之类的东西,但我不太清楚如何绕过所有权问题 mvp_molecular.rs #[派生(调试)] 结构原子{ 原子符号:字符串, 索引:i16, } #[导出(调试)] 结构债券{ 原子_1:atom, 原子_

我正在尝试建立一个分子数据结构。从一个原子开始,一个分子
Vec
存储所有的
Atom
s(及其坐标和索引等)。我还想要一个
Bond
struct,它将有一对
Atom
struct,另一个
Vec
存储所有的键。我将对
角度
等做同样的处理

一旦进入结构中,数据就不会发生变化,它只会被用来通过方法计算债券长度之类的东西,但我不太清楚如何绕过所有权问题

mvp_molecular.rs

#[派生(调试)]
结构原子{
原子符号:字符串,
索引:i16,
}
#[导出(调试)]
结构债券{
原子_1:atom,
原子_2:atom,
}
pub fn make_molecular(){
让mut molecule=Vec::new();
让mut bonds=Vec::new();
设atom_1=atom{
原子符号:“C”。到字符串(),
索引:0,
};
分子推力(原子推力1);
设atom_2=atom{
原子符号:“H”。到字符串(),
索引:1,
};
分子推力(原子μ2);
让邦德=邦德{
原子_1:分子[0],
原子_2:分子[1],
};
推(键);
}
我认为问题在于Rust认为我可能会在原子处于键状态时更改原子,而我不会这样做。我怎样才能让Rust相信这一点


我明白这可能是一个常见的问题,但我还没有学到足够的知识来认识到我应该寻找什么来解决它。我已经查阅了很多关于引用、借用和生命周期的文档,但我仍然不太确定我要解决的问题是什么,或者是否可以通过这种方式解决。

错误是什么?如果你提供一个答案,别人会更容易回答。如前所述,
Bond
拥有两个
Atom
s。如果您从
Vec
已拥有的
Atom
构建
Bond
,则需要克隆它们,否则将使
Vec
无效(这将导致“无法移出
std::Vec::Vec
索引”的错误)。可能您希望
Bond
的字段是
&Atom
,-或者可能是
Rc
,这取决于您需要如何共享这些字段。@PeterHall,我编辑了编译时遇到的错误。另请参见:目前,没有人能够以对以后的其他人有用的方式回答您的问题。它将转化为一系列解决每个新问题的解决方案,直到为您编写了非常具体的代码。写一篇文章可以帮助你一次只关注并完全理解一个孤立的问题。如果这导致实际代码中出现新问题,您可以编写一个新问题(或者希望找到一个现有的答案)。