Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Delphi7使用记录程序?_Delphi_Record_Procedure - Fatal编程技术网

如何使用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兼容的代码的人来说,例如,一个库或一组带有遗留代码的项目,这是一种回归,需要避免。