rust 在编译时没有已知的Vector自身结构体的大小

hwamh0ep  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(130)

我正在写我的第一个Rust程序(在hello world之后)。我创建了一个简单的结构体来 Package “ImageFile”-将添加进一步的逻辑:

use std::path::Path;

pub struct ImageFile {
    size: u64,
    path: Path,
}

字符串
首先,我需要把“路径”作为最后一个字段。因为大小-当然-在运行时是未知的。我需要的类型能够暴露某些“Meta数据”的图像文件,如类型,扩展名等。
问题是:无论我在哪里使用Vec<ImageFile>,我都会得到这样的错误

error[E0277]: the size for values of type `[u8]` cannot be known at compilation time
   --> src\image\FileIndex.rs:7:12
    |
7   |     files: Vec<ImageFile>,
    |            ^^^^^^^^^^^^^^ doesn't have a size known at compile-time
    |


这是从

use std::{fs};
use crate::index;
use self::super::ImageFile::ImageFile as ImageFile;
/// index of all files for all given dircetories
pub struct FileIndex {
    folders: Vec<String>,
    files: Vec<ImageFile>, //first error here
}

impl FileIndex  {
    pub fn new(folders: Vec<String>) -> FileIndex {
        FileIndex {
            folders,
            files: index(),
        }
    }
...


这将为给定文件夹创建所有图像文件的索引。
对于我的用例,解决此问题的最佳方法是什么?

jljoyd4f

jljoyd4f1#

这是我能做的最好的解释find
正如文章中所解释的,Path Implementation只适用于未调整大小的类型的引用。
只有当您出于某种原因想要更改路径时,才有必要使用PathBuf。
最好的方法是按如下方式定义ImageFile结构。

pub struct ImageFile <'a> {
    size: u64,
    path: &'a Path,
}

字符串

相关问题