如何使用Delphi7使用记录程序?
如果这个代码有什么问题,我只想在记录里面放一个过程:如何使用Delphi7使用记录程序?,delphi,record,procedure,Delphi,Record,Procedure,如果这个代码有什么问题,我只想在记录里面放一个过程: unit unTEFTipos; interface type TTEFPagamento = record AcrescimoDesconto: Double; TrocoSaque: Double; procedure Clear; end; implementation procedure TTEFPagamento.Clear; begin AcrescimoDesconto := 0;
unit unTEFTipos;
interface
type
TTEFPagamento = record
AcrescimoDesconto: Double;
TrocoSaque: Double;
procedure Clear;
end;
implementation
procedure TTEFPagamento.Clear;
begin
AcrescimoDesconto := 0;
TrocoSaque := 0;
end;
end.
但是Delphi 7 IDE返回以下错误:
Build
[Error] unTEFTipos.pas(10): 'END' expected but 'PROCEDURE' found
[Error] unTEFTipos.pas(11): 'IMPLEMENTATION' expected but ';' found
[Error] unTEFTipos.pas(13): '.' expected but 'IMPLEMENTATION' found
[Error] unTEFTipos.pas(10): Unsatisfied forward or external declaration: 'Clear'
[Fatal Error] GP.dpr(486): Could not compile used unit 'TEF\unTEFTipos.pas'
在旧版本的Delphi中,如果要添加方法,必须使用
object
而不是record
TTEFPagamento = object
AcrescimoDesconto: Double;
TrocoSaque: Double;
procedure Clear;
end;
它也将与较新版本兼容,即使您在初始化其中的托管变量时可能会遇到一些问题
所以我最终写了这样的东西:
TTEFPagamento = {$ifdef UNICODE}record{$else}object{$endif}
AcrescimoDesconto: Double;
TrocoSaque: Double;
procedure Clear;
end;
它在所有版本上编译,行为相同。Delphi 7不允许记录方法,这种语法是在D2006中引入的。虽然我投票决定在编辑后重新打开,但指出它的答案可能是合适的。简单地说,您正在尝试使用D7中不存在的语言特性。如果希望能够使用现代功能,请升级到Delphi的现代版本。在D7中实现所需功能的唯一方法是使用类而不是记录。在旧版本的Delphi中,如果要添加方法,则必须使用
object
而不是record
。最好包括引入高级记录功能的特定版本(D2006)。Unicode是一个糟糕的选择器,因为D2006和D2007都提供了高级记录支持,这两个版本都是非Unicode版本。讨论对象
vs记录
@J的赋值语义也很好。。。这不是重点。这不是关于语法特性,而是关于编译器错误/回归。Unicode是我们需要避免的错误/回归的一个很好的选择器-看AFAICT这个错误从未被修复过,因为Embarcadero说object
已被弃用。这可能是从他们的角度来看的,但对于那些维护与最旧版本的Delphi兼容的代码的人来说,例如,一个库或一组带有遗留代码的项目,这是一种回归,需要避免。