我希望使用记录定义常量,其中一个变量是类。 并收到错误: [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;
同样的错误。
答案 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声明为变量并在运行时加载它。