E2003未声明的标识符:' ITestInterfataUnit'

时间:2015-09-04 06:38:00

标签: delphi

这看起来像一个愚蠢的问题,但我已经挣扎了一段时间。我有两个单位。一个是具有声明接口的单元,另一个是我想要实现该接口的Form。代码:

unit ITestInterfata;

interface


implementation

 type
  ITestInterfataUnit = interface
    ['{A0CD69F8-C919-4D2D-9922-A7A38A6C841C}']

    procedure Intrare(s : string);
  end;

end.

主要单位:

unit frameTestInterfata;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, ITestInterfata;



type
  TformaTestInterfata = class(TForm, ITestInterfataUnit)
    Button1: TButton;
  private
    { Private declarations }
  public
    { Public declarations }
    procedure Intrare(s: string);
  end;

var
  formaTestInterfata: TformaTestInterfata;

implementation

{$R *.dfm}


{ TformaTestInterfata }

procedure TformaTestInterfata.Intrare(s: string);
begin
  ShowMessage('asdf');
end;

end.

如果我使用CTRL +点击ITestInterfataUnit,它会把我带到正确位置的正确单位。我已经看到了像这里讨论的问题而且我已经尝试过我所看到的所有解决方案。

  • 再次创建项目
  • 关闭并打开Delphi IDE
  • 检查接口单元是否以主窗体uses声明
  • 确保我给单位命名,这样就没有其他的.dcu具有相同的名称。

1 个答案:

答案 0 :(得分:5)

仅导出单位界面部分中定义的符号,因此在其他单位中可见。您在实现部分中定义了符号ITestInterfataUnit,因此ITestInterfataUnit在其他单元中不可见。

documentation说:

  

接口部分声明客户端可用的常量,类型,变量,过程和函数。也就是说,希望使用本单元中的元素的其他单位或程序。这些实体被称为public,因为其他单元中的代码可以访问它们,就像它们在单元本身中声明一样。

     

...

     

除了公共过程和函数的定义之外,实现部分还可以声明该单元专用的常量,类型(包括类),变量,过程和函数。也就是说,与接口部分不同,实现部分中声明的实体是其他单元无法访问的。

您必须在界面部分中定义ITestInterfataUnit

unit ITestInterfata;

interface

type
  ITestInterfataUnit = interface
    ['{A0CD69F8-C919-4D2D-9922-A7A38A6C841C}']

    procedure Intrare(s : string);
  end;

implementation

end.