预期的结构体 `VecDeque<Student>` 找到了结构体 `VecDeque<Student>` (`Student`) - Rust

问题描述 投票:0回答:1

我正在学习 Rust,并且正在练习 Traits 和 generic。我编写了以下代码。我不明白为什么它不起作用,我的意思是,我不明白为什么会出错。

struct Student {
    name: String,
    age: u8,
    course: String
}

struct School {
    students: VecDeque<Student>
}

trait Database<T> {
    fn get_database(&self) -> &VecDeque<T>;
}

impl<Student> Database<Student> for School {
    fn get_database(&self) -> &VecDeque<Student> {
        &self.students
    }
}

The compiler points out: 
  --> src\main.rs:25:9
   |
23 | impl<Student> Database<Student> for School {
   |      ------- expected this type parameter
24 |     fn get_database(&self) -> &VecDeque<Student> {
   |                               ------------------ expected `&VecDeque<Student>` because of return type
25 |         &self.students
   |         ^^^^^^^^^^^^^^ expected type parameter `Student`, found `Student`
   |
   = note: expected reference `&VecDeque<Student>` (type parameter `Student`)
              found reference `&VecDeque<Student>` (`Student`)

我不明白我做错了什么,因为 self.students 是 VecDeque 类型,并且该类型的引用是从该方法返回的。 谢谢!

rust
1个回答
0
投票

这一行是你的问题:

impl<Student> Database<Student> for School {

impl<Student>
本质上与
impl<T>
相同。您正在声明一个名为
Student
的泛型类型参数,它可以是任何类型。
Student
块中
impl
的其余用法引用此泛型类型,而不是
Student
结构。

要解决此问题,只需将

impl<Student>
更改为
impl
:

impl Database<Student> for School {
© www.soinside.com 2019 - 2024. All rights reserved.