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

Lazarus控制台程序重写DoRun时遇语法错误求助

问题解决:Lazarus控制台应用编译错误 ";" expected but "." found

错误根源

你的代码中类AplikacjaKonsolowa的定义未正确闭合:在类声明的最后一行procedure WriteHelp; virtual;之后,没有添加end;就直接定义了wezel记录类型。这导致编译器无法正确识别类的边界,进而解析后续的AplikacjaKonsolowa.DoRun方法时出现语法错误。

除此之外还有几个次要问题需要修正:

  • Pascal中过程参数的分隔符是;而非,,DodanieLiczbyDoKolejki的参数列表需要修改
  • 指针类型不能和整数-1比较,应使用nil判断空指针
  • ClrScr和gotoXY属于Crt单元的函数,需要在uses中添加Crt

修正后的完整代码

program lista;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  Classes, SysUtils, CustApp, Crt  // 添加Crt单元以支持ClrScr和gotoXY
  { you can add units after this };

type

  { AplikacjaKonsolowa }

  AplikacjaKonsolowa = class(TCustomApplication)
  protected
    procedure DoRun; override;
  public
    constructor Create(TheOwner: TComponent); override;
    destructor Destroy; override;
    procedure WriteHelp; virtual;
  end;  // 补充类定义的闭合end;

type
  wezel = record
    wartosc: integer;
    nastepny: ^wezel;
  end;


procedure AplikacjaKonsolowa.DoRun;
var
  ErrorMsg: String;
  wezlyKolejka: array[0..24] of wezel;
  wezlyStosP: array[0..24] of wezel;
  wezlyStosN: array [0..24] of wezel;
  tablicaPar: array[0..1] of array[0..24] of integer;
begin
  // quick check parameters
  ErrorMsg:=CheckOptions('h', 'help');
  if ErrorMsg<>'' then begin
    ShowException(Exception.Create(ErrorMsg));
    Terminate;
    Exit;
  end;

  // parse parameters
  if HasOption('h', 'help') then begin
    WriteHelp;
    Terminate;
    Exit;
  end;

  { add your program here }
  ClrScr;
  gotoXY(10,10);
  writeln('dupa');
  readln;

  // stop program loop
  Terminate;
end;


procedure DodanieLiczbyDoKolejki(kolejka: wezel; liczba: integer);  // 参数分隔符改为;
begin
  while kolejka.nastepny <> nil do  // 指针用nil判断而非-1
  begin
    kolejka := kolejka.nastepny^;
  end;
end;


constructor AplikacjaKonsolowa.Create(TheOwner: TComponent);
begin
  inherited Create(TheOwner);
  StopOnException:=True;
end;

destructor AplikacjaKonsolowa.Destroy;
begin
  inherited Destroy;
end;

procedure AplikacjaKonsolowa.WriteHelp;
begin
  { add your help code here }
  writeln('Usage: ', ExeName, ' -h');
end;

var
  Application: AplikacjaKonsolowa;
begin
  Application:=AplikacjaKonsolowa.Create(nil);
  Application.Title:='AplikacjaKonsolowa';
  Application.Run;
  Application.Free;
end.

关键修正点说明

  1. 补充类闭合end;:在AplikacjaKonsolowa类声明的最后添加end;,让编译器正确识别类的边界,这是解决你遇到的语法错误的核心。
  2. 参数分隔符修正:将DodanieLiczbyDoKolejki的参数列表中逗号改为分号,符合Pascal语法规范。
  3. 指针空值判断:将kolejka.nastepny <> -1改为kolejka.nastepny <> nil,指针类型只能和nil比较是否为空。
  4. 添加Crt单元:引入Crt单元以支持控制台清屏和光标定位函数。

内容的提问来源于stack exchange,提问作者flis00

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 02:16:14