Lazarus开发Pascal程序时访问Norden属性触发访问违例错误
解决Lazarus Pascal中输入"Norden"触发访问违例的问题
你的程序触发访问违例的核心原因是代码中的低级语法错误:在Button1Click事件处理过程里,处理"Westen"输入的分支中,begin被误写成了begin5,这直接破坏了代码的结构逻辑,导致编译器解析异常,最终引发运行时访问违例。
修复步骤
找到Button1Click中对应"Westen"的代码块,将错误的begin5修改为正确的begin即可:
修复后的代码片段:
else if Eingabe = 'Westen' then begin if aktuellerRaum.Westen <> nil then begin aktuellerRaum := aktuellerRaum.Westen; Memo1.Lines.Add(aktuellerRaum.Beschreibung); end else begin Memo1.Lines.Add('Es gibt keinen Ausgang nach Westen.'); end; end
额外优化建议
你这段代码中四个方向的判断逻辑高度重复,可以通过封装函数来简化代码,比如:
procedure BewegeZuRaum(ZielRaum: TRaum; NachrichtFehler: String); begin if ZielRaum <> nil then begin aktuellerRaum := ZielRaum; Memo1.Lines.Add(aktuellerRaum.Beschreibung); end else begin Memo1.Lines.Add(NachrichtFehler); end; end;
之后在Button1Click中只需调用这个函数:
procedure TForm1.Button1Click(Sender: TObject); var Eingabe: string; begin Eingabe := Edit1.Text; if Eingabe = 'Norden' then BewegeZuRaum(aktuellerRaum.Norden, 'Es gibt keinen Ausgang nach Norden.') else if Eingabe = 'Osten' then BewegeZuRaum(aktuellerRaum.Osten, 'Es gibt keinen Ausgang nach Osten.') else if Eingabe = 'Sueden' then BewegeZuRaum(aktuellerRaum.Sueden, 'Es gibt keinen Ausgang nach Süden.') else if Eingabe = 'Westen' then BewegeZuRaum(aktuellerRaum.Westen, 'Es gibt keinen Ausgang nach Westen.') else Memo1.Lines.Add('Ungültige Eingabe.'); end;
内容的提问来源于stack exchange,提问作者Lan Amk
相关产品推荐
相关产品推荐

