首页 > 解决方案 > 为什么仅在将重载过程分配给局部变量后才使用“H2219 Private symbol X declared but never used”?

问题描述

我仅在将私有方法分配给局部变量后才使用它:

  TMyTestWithoutParam = procedure() of object;
  TMyTestIntegerParam = procedure(APar : integer) of object;
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    procedure  Test(); overload;
    procedure  Test(APar : integer); overload;
  end;

...

procedure TForm1.FormCreate(Sender: TObject);
var
  TmpA : TMyTestWithoutParam;
  TmpB : TMyTestIntegerParam;
begin
  TmpA := Test;
  TmpA();

  TmpB := Test;
  TmpB(1);
end;

procedure  TForm1.Test();
begin
  //...
end;

procedure  TForm1.Test(APar : Integer);
begin
  //...
end;

在编译时,它会引发H2219警告消息:

[DCC 警告] Unit1.pas(16): H2219 私有符号“测试”已声明但从未使用

为什么会出现H2219警告,这是避免这种情况的正确方法?

标签: delphioverloadingcompiler-warningsdelphi-2007

解决方案


我已经使用Delphi XE7对其进行了测试,但无法重现该问题。我认为它已在较新的 IDE 版本中得到修复。

Delphi 2007下,可以通过关闭/打开提示来避免警告

  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    {$HINTS OFF}
    procedure  Test(); overload;
    procedure  Test(APar : integer); overload;
    {$HINTS ON}
  end;

推荐阅读