gpt4 book ai didi

delphi - 为什么 "The Tomes of Delphi"处的代码无法编译?

转载 作者:行者123 更新时间:2023-12-03 14:46:40 25 4
gpt4 key购买 nike

我正在尝试使用 The Tomes of Delphi 中包含的代码中的 TDRecLstTDSplyCm 单位,但我在 TDBasics.pas 中收到编译器错误:

Identifier expected but 'CONST' found

我在TDStrRes.inc中遇到类似的错误:

Same error as above

出了什么问题,如何解决?

The code可从作者处获取。

最佳答案

显然,您使用的 Delphi 版本比 Delphi 6 更新。尽管在 2005 年进行了更新,但该书中的代码最多只能检测到该版本的 Delphi。 TDDefine.inc 根据它检测到的版本定义了许多编译器符号,但是当您使用的版本不是它识别的任何版本时,它就不会定义任何符号。当编译器在 TDBasics.pas 中遇到这样的代码时,这最终会导致问题;

implementation

uses
{$IFDEF Delphi1}
WinTypes, WinProcs;
{$ENDIF}
{$IFDEF Delphi2Plus}
Windows;
{$ENDIF}
{$IFDEF Kylix1Plus}
Types, Libc;
{$ENDIF}

{$IFDEF Delphi1}
{$R TDStrRes.r16}
{$ENDIF}
{$IFDEF Delphi2Plus}
{$R TDStrRes.r32}
{$ENDIF}
{$IFDEF Kylix1Plus}
{$R TDStrRes.r32}
{$ENDIF}

const
UnitName = 'TDBasics';

由于 Delphi1Delphi2PlusKylix1Plus 均未定义,因此 uses 子句为空。当我们忽略所有编译器指令和非事件代码块时,编译器最终会看到如下代码:

implementation

uses

const
UnitName = 'TDBasics';

这就是编译器提示需要标识符而不是 const 的原因。

要解决这个问题,您需要教 TDDefine.inc 识别您的 Delphi 版本。不过,更简单的方法可能是忽略所有版本检测代码并对适用于您正在使用的版本的所有符号进行硬编码。只要您从不使用任何早于 Delphi 6 的版本,所有符号都将适用于您的所有版本。

TDDefine.pas中找到以下代码块:

{$IFDEF VER140}
{$DEFINE Delphi6}
{$DEFINE Delphi1Plus}
{$DEFINE Delphi2Plus}
{$DEFINE Delphi3Plus}
{$DEFINE Delphi4Plus}
{$DEFINE Delphi5Plus}
{$DEFINE Delphi6Plus}
{$DEFINE HasAssert}
{$ENDIF}

删除第一行和最后一行,以便无条件处理剩余的 $DEFINE 指令。

关于delphi - 为什么 "The Tomes of Delphi"处的代码无法编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16949486/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com