簡體   English   中英

E2003 未聲明的標識符:'ITestInterfataUnit'

[英]E2003 Undeclared identifier: 'ITestInterfataUnit'

這看起來是一個愚蠢的問題,但我已經為此苦苦掙扎了一段時間。 我有兩個單位。 一個是帶有聲明接口的單元,另一個是我想實現該接口的表單。 代碼:

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.

如果我在ITestInterfataUnit上使用 CTRL+單擊,它會將我帶到正確位置的正確單元。 我已經看到這里討論過這樣的問題,我已經嘗試了所有我認為的解決方案。

  • 再次創建項目
  • 關閉和打開 Delphi IDE
  • 檢查接口單元是否在主窗體中聲明uses
  • 確保我為該單元命名,因此不會有其他同名的 .dcu。

只有在單元的接口部分中定義的符號才會被導出並在其他單元中可見。 您在實現部分定義了符號ITestInterfataUnit ,因此ITestInterfataUnit在其他單元中不可見。

文檔說:

接口部分聲明了客戶端可用的常量、類型、變量、過程和函數。 也就是說,對於希望使用該單元中的元素的其他單元或程序。 這些實體被稱為公共實體,因為其他單元中的代碼可以訪問它們,就像它們在單元本身中聲明一樣。

....

除了公共過程和函數的定義之外,實現部分還可以聲明單元私有的常量、類型(包括類)、變量、過程和函數。 也就是說,與接口部分不同,其他單元無法訪問在實現部分中聲明的實體。

您必須在接口部分定義ITestInterfataUnit

unit ITestInterfata;

interface

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

    procedure Intrare(s : string);
  end;

implementation

end.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM