我如何声明一个函数,该函数将一个尚未识别的类型的变量作为参数

时间:2016-10-27 20:54:09

标签: delphi types declaration lazarus

问题是标题所示。 O得到错误:期望的类型标识符,(我认为)来自在类型声明之前读取的函数声明。

type
  TForm1 = class(TForm)
    //other declarations
    function ItemThere(x: TItem): boolean; // here it says TItem is unknown
  end;

type
  TItem = class
    Name : String;
    Description : String;
    constructor Create;
  end;

另外,我想让你知道我是一个相当缺乏经验的程序员。 我怎样才能解决这个问题?我应该将TItem的声明移到TForm1之上吗?谢谢你的帮助。

1 个答案:

答案 0 :(得分:5)

Delphi的编译器需要知道之前使用的类型。使用您的代码有两种方法可以实现。

  1. 将声明移到首次使用的位置上方:

    type
      TItem = class
        Name : String;
        Description : String;
        constructor Create;
      end;
    
      TForm1 = class(TForm)
        //other declarations
        function ItemThere(x: TItem): boolean; 
      end;
    
  2. 使用所谓的forward declaration,它基本上只是告诉编译器您正在使用稍后定义的类(在同一类型声明部分中):

    type
      TItem = class;              // forward declaration
    
      TForm1 = class(TForm)
        //other declarations
        function ItemThere(x: TItem): boolean; 
      end;
    
      TItem = class               // Now define the class itself
        Name : String;
        Description : String;
        constructor Create;
      end;