Compiler errors 使用生存期表示法的奇怪编译错误:“quot;应为“:”,找到“>`&引用;

Compiler errors 使用生存期表示法的奇怪编译错误:“quot;应为“:”,找到“>`&引用;,compiler-errors,rust,lexer,Compiler Errors,Rust,Lexer,我定义了一个结构和方法,如下所示: struct Lexer<'a> { input: String, pos: CharIndices<'a>, next_pos: Peekable<CharIndices<'a>>, ch: char, } impl<'a> Lexer<'a> { pub fn new(input: String) -> Lexer<'a> {

我定义了一个结构和方法,如下所示:

struct Lexer<'a> {
    input: String,
    pos: CharIndices<'a>,
    next_pos: Peekable<CharIndices<'a>>,
    ch: char,
}

impl<'a> Lexer<'a> {
    pub fn new(input: String) -> Lexer<'a> {
        let mut lexer = Lexer<'a> {
            input,
            pos: input.char_indices(),
            next_pos: input.char_indices().peekable(),
            ch: char::from(0 as u8),
        };

        lexer
    }
}
struct Lexer,
下一个位置:可窥视Lexer{
让mut lexer=lexer{
|^应为“”:`
但是,按要求执行并将有问题的行更改为
let mut lexer=lexer{
|^标签后应为'while'、'for'、'loop'或`{`
我不知道为什么编译器会抱怨,而且尽我所能告诉你,终生符号对我来说很好


我刚刚意识到,构造函数不需要一辈子

正确的符号是

let mut lexer = Lexer {
不是


让mut-lexer=lexer和为什么
mut
?;)代码没有必要保持原样。在我的实际程序中,lexer在构造之后但在返回之前被修改。我删除了它,因为它与问题无关。我将在这里更新我的代码,以更好地反映这一点。这很明显,别担心^^您的代码不会编译,因为e
0
不是字符,这个问题只是一个语法错误。您必须编写
Lexer::
,例如:
Lexer@hellow0不是字符,但编译器在相关错误得到解决之前不会为此给出错误,因此我没有捕获它。有(许多)此代码中的其他错误,但在修复相关错误之前,编译器无法看到任何错误。我已更新了我的问题。
let mut lexer = Lexer<'a> {