unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
type IMyInTerFace = interface(Iinterface)    procedure P1;
    procedure p2;
  end;
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  protected
    FMInTerFace: IMyInTerFace;
  public    { Public declarations }
  end;
type TmpInTerFace = class(TInterfacedObject, IMyInTerFace)
    constructor create;
    procedure P1;
    procedure p2;
  end;
type TImplements = class(TInterfacedObject, IMyInTerFace)
 protected
    FMInTerFace: IMyInTerFace;
    property MyInTerFace: IMyInTerFace read FMInTerFace implements IMyInTerFace;
  end;var
  Form1: TForm1;implementation{$R *.dfm}{ ImpInTerFace }constructor TmpInTerFace.create;beginend;procedure TmpInTerFace.P1;
begin
  ShowMessage('P1');
end;procedure TmpInTerFace.p2;
begin
  ShowMessage('P2');
end;procedure TForm1.Button1Click(Sender: TObject);
var
  TImp:TImplements; //实现委托属性类
  InTet:IMyInTerFace; //接口
  TnTerImp:TmpInTerFace;  //实现接口类的对象
begin
 TImp:=TImplements.Create;
 Timp.FMInTerFace:=TnTerImp.create;
 InTet:=TImp;
 InTet.P1;
end;end.出现错误 [Warning] Unit1.pas(68): Variable 'TnTerImp' might not have been initialized应该怎么去解决这个问题呢?

解决方案 »

  1.   

    Timp.FMInTerFace:=TnTerImp.create;
    改成
    Timp.FMInTerFace:=TmpInTerFace.create;
    TnTerImp -- 是变量,不是类
      

  2.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      TImp:TImplements; //实现委托属性类
      InTet:IMyInTerFace; //接口
      TnTerImp:TmpInTerFace;  //实现接口类的对象
    begin
     TImp:=TImplements.Create;
     Timp.FMInTerFace:= TmpInTerFace.create;    //TnTerImp.create;   變理與類搞混了吧
     InTet:=TImp;
     InTet.P1;
    end;
      

  3.   

    你的概念混淆了,看看基本知识吧,TnTerImp只是个实例,本身不能用来创建实例
      

  4.   

    TnTerImp在创建之前只是一个符号而已,空的,只有创建只会才分配对应的内存,他的个个接口才能用。另外这是很简单的常识,你见过窗体的动态创建用变量自身吗?道理一样。
      

  5.   

    TnTerImp在创建之前只是一个符号而已,空的,只有创建只会才分配对应的内存,他的个个接口才能用。另外这是很简单的常识,你见过窗体的动态创建用变量自身吗?道理一样。