传递类来记录

时间:2012-03-23 20:22:58

标签: delphi class record

我希望使用记录定义常量,其中一个变量是类。 并收到错误: [DCC错误] usample.pas(18):E2026预期的常量表达

Unit1 中的类和记录声明:

type TParentClass = class (TObject)
 function Call(s: string) : boolean;
end;

type TMyRecord = record
 s: string;
 c: TParentClass; //or TClass
end;

Unit2 与Child Class和记录:

type TChildClass = class (TParentClass);
 procedure two;

var:
  class_var: TChildClass;

const
 rec_var : array[0..1] of TMyRecord = (
   (s : ''; c : class_var) //Error with class_var.
 );

UPD:我想在Class中使用Class和unit1搜索函数填充记录。它是一个团队项目。

UPD2:

const 
  class_var: TChildClass = nil;

同样的错误。

3 个答案:

答案 0 :(得分:2)

因为正如编译器所说,你必须在那里放一个常量,但是你将class_var定义为一个变量。

将class_var更改为声明为常量,而不是变量。

但实际上无法做到这一点:

const
  class_var  = TParentClass;

是不允许的。

const
  class_var : TClass = TParentClass;

不是真实常量,您不能在另一个常量声明中使用它。

答案 1 :(得分:2)

在您的最新更新中,您会问为什么不能编译:

const 
  class_var: TChildClass = nil;

rec_var: TMyRecord = (s: ''; c: class_var);

无法编译的原因是class_var不是true constant。你可以这样写:

rec_var: TMyRecord = (s: ''; c: nil);

因为nil是一个真正的常量。

我很难掌握你真正想做的事情,但我的直觉告诉我,一个常数不是你需要的。我认为您将需要使用在启动时初始化的变量。

答案 2 :(得分:0)

您无法使用初始化为变量内容的字段定义const。编译器需要在编译时评估consts,即当class_var甚至没有位置时,不要介意任何内容。

忘记这个想法。如果可以,请将rec_var声明为变量并在运行时加载它。