type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    function ShowMethodAddress(aObj:TDerived;const sData:String):Pointer;//提示TDerived类无法识别
  end;  TDerived=class(TObject)
  private
    { Private declarations }
    FDate:Variant;
  public
    { Public declarations }
    function toString:String;
    function PureMethod:String;
    function GetBothId(Const idefault:Integer=0):String;reintroduce;
    overload;Published
    function MyMethod1:String;    procedure MyMethod2;
    property sDate:Variant read FDate write FDate;
  end;
var
  Form1: TForm1;implementation
请问一个Form类中函数调用到自定义TDerived类,不识别请问哪儿错了,谢谢!
  TDerived=class(TObject)
  private
    { Private declarations }
    FDate:Variant;
  public
    { Public declarations }
    function toString:String;
    function PureMethod:String;
    function GetBothId(Const idefault:Integer=0):String;reintroduce;
    overload;Published
    function MyMethod1:String;    procedure MyMethod2;
    property sDate:Variant read FDate write FDate;
  end;
var
  Form1: TForm1;implementation

解决方案 »

  1.   

    在Tform定义上面加一句TDerived=class;
      

  2.   


     TDerived=class(TObject)
     ...放到 type 下面, TForm1 = class(TForm) 上面就可
      

  3.   

    放在前面就好了,但是后面函数实现的时候报错
    function TForm1.ShowMethodAddress(aObj:TDerived;const sData:String);Pointer;
    begin
    ...
    end;
    [Warning] uObjects3.pas(84): Variable 'aObj' might not have been initialized
    ,请问aObj初始化语句在什么地方写啊?在type里不好写aObj:=TDerived.create()吧
      

  4.   

    在Form.Creat里面生成一个TDerived实例,在调用时传给ShowMethodAddress函数里面的参数。