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.
关键修正点说明
- 补充类闭合
end;:在AplikacjaKonsolowa类声明的最后添加end;,让编译器正确识别类的边界,这是解决你遇到的语法错误的核心。 - 参数分隔符修正:将
DodanieLiczbyDoKolejki的参数列表中逗号改为分号,符合Pascal语法规范。 - 指针空值判断:将
kolejka.nastepny <> -1改为kolejka.nastepny <> nil,指针类型只能和nil比较是否为空。 - 添加
Crt单元:引入Crt单元以支持控制台清屏和光标定位函数。
内容的提问来源于stack exchange,提问作者flis00
相关产品推荐
相关产品推荐

