gpt4 book ai didi

rust - 未找到方法/字段名称

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

我正在尝试应用一些 OOP,但我遇到了问题。

use std::io::Read;

struct Source {
look: char
}

impl Source {
fn new() {
Source {look: '\0'};
}

fn get_char(&mut self) {
self.look = 'a';
}
}


fn main() {
let src = Source::new();
src.get_char();

println!("{}", src.look);
}

编译器报告这些错误,对于 src.get_char();:

error: no method named get_char found for type () in the current scope

对于 println!("{}", src.look);:

attempted access of field look on type (), but no field with that name was found

我无法找出我错过了什么。

最佳答案

Source::new 没有指定返回类型,因此返回 ()(空元组,也称为单元)。

因此,src 的类型是 (),它没有 get_char 方法,这就是错误消息所告诉的内容你。

所以,首先,让我们为 new 设置一个正确的签名:fn new() -> Source。现在我们得到:

error: not all control paths return a value [E0269]
fn new() -> Source {
Source {look: '\0'};
}

这是因为 Rust 是一种表达式语言,几乎所有东西都是表达式,除非使用分号将表达式转换为语句。您可以编写 new :

fn new() -> Source { 
return Source { look: '\0' };
}

或者:

fn new() -> Source {
Source { look: '\0' } // look Ma, no semi-colon!
}

后者在 Rust 中更为惯用。

那么,让我们这样做,现在我们得到:

error: cannot borrow immutable local variable `src` as mutable
src.get_char();
^~~

这是因为 src 被声明为不可变的(默认),要使其可变,您需要使用 let mut src

现在一切正常了!


最终代码:

use std::io::Read;

struct Source {
look: char
}

impl Source {
fn new() -> Source {
Source {look: '\0'}
}

fn get_char(&mut self) {
self.look = 'a';
}
}

fn main() {
let mut src = Source::new();
src.get_char();

println!("{}", src.look);
}

注意:出现警告是因为 std::io::Read 未使用,但我假设您打算使用它。

关于rust - 未找到方法/字段名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37877402/

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