You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 01:33:37