Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 如何设置非';这不是函数的参数吗?_Rust_Lifetime - Fatal编程技术网

Rust 如何设置非';这不是函数的参数吗?

Rust 如何设置非';这不是函数的参数吗?,rust,lifetime,Rust,Lifetime,我正试图编译这段代码。函数get_lines必须生成一个Lines的向量,将新行推到该向量上并返回该向量 fn main() { let begin_point = Point{x:100, y:100}; let end_point = Point{x:300, y:100}; let lines = get_lines( &begin_point, &end_point); } fn get_lines<'a>(begin_point:

我正试图编译这段代码。函数
get_lines
必须生成一个
Line
s的向量,将新行推到该向量上并返回该向量

fn main() {
    let begin_point = Point{x:100, y:100};
    let end_point = Point{x:300, y:100};

    let lines = get_lines( &begin_point, &end_point);
}

fn get_lines<'a>(begin_point: &'a Point, end_point: &'a Point) -> Vec<Line<'a>>
{
    let mut lines: Vec<Line> = vec![];
    let middle_color = Color{r:0,g:0,b:0};

    let line = Line {
        begin_point: begin_point,
        end_point: end_point,
        color: &middle_color,
    };

    lines.push(line);
    lines
}

struct Color<> {r:i32, g:i32, b:i32}
struct Point {x:i32, y:i32}
struct Line<'a> {
    begin_point: &'a Point,
    end_point: &'a Point,
    color: &'a Color
}
fn main(){
让begin_point=point{x:100,y:100};
设端点=点{x:300,y:100};
let lines=获取线(&开始点,&结束点);
}
fn获取\u行>
{
让mut行:Vec=Vec![];
设middle_color=color{r:0,g:0,b:0};
让线=线{
开始点:开始点,
终点:终点,
颜色:&中间颜色,
};
推(线);
线
}
结构颜色{r:i32,g:i32,b:i32}
结构点{x:i32,y:i32}

struct Line会出现错误,因为当
get\u Line()
返回时,
middle\u color
超出范围并被释放。如果不发生这种情况,向量中会有一个悬空的指针

如果您确实想在
行中使用对
颜色的引用,可以在
main
函数中实例化它,并将对它的引用传递到
获取行()
,例如:

fn get_lines<'a>(begin_point: &'a Point, end_point: &'a Point, middle_color: &'a Color) -> Vec<Line<'a>>
{
...
}

fn获取行数,这不是完整的代码。我试着让它变得简单。在原始
中间颜色中
取自其他功能。在未来,它将在循环中创建。这是。在这种情况下,我不会在
行中使用引用,因为您失去了很多灵活性
Point
Color
Copy
类型,您只需派生实现即可。所以我要让
包含实际值。你是什么意思?创建了
行的副本
并将此副本的引用发送到结构中?或者将
Line
struct的字段作为实值?后者-在Line的字段中使用实值。例如:
struct Line{p1:Point,p2:Point,c:Color}
。你的问题可以回答,但最好知道你想做什么。
fn get_lines<'a>(begin_point: &'a Point, end_point: &'a Point, middle_color: &'a Color) -> Vec<Line<'a>>
{
...
}