You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi中类内定长数组初始化失败而全局变量正常的原因

编译差异原因说明

这是Delphi/Object Pascal的语法规则限制导致的差异,具体原因如下:

  • 全局变量初始化是原生支持的合法语法:全局变量存储在程序的静态存储区,程序启动加载时就会完成内存分配和初始值写入,整个程序生命周期仅初始化一次,因此允许在声明时直接赋值。
  • 类的实例字段不支持声明阶段直接赋值:类是实例对象的模板,每创建一个类实例都会分配独立的字段内存空间,语法要求实例字段的初始化逻辑必须放在类的构造函数Create中执行,每次创建实例时都会执行一次构造内的初始化逻辑,避免不同实例的初始化逻辑冲突。

可行的类定义修改方案

方案1:构造函数中初始化实例字段

TNumbers = class
private
  var NumbersPriv : array[1..7] of integer;
public
  var NumbersPub : array[1..7] of integer;
  constructor Create;
end;

constructor TNumbers.Create;
begin
  inherited Create;
  NumbersPriv := (1,2,4,5,6,7,2);
  NumbersPub := (1,2,4,5,6,7,2);
end;

方案2:声明为类常量(如果值不需要随实例修改)

如果这些数组的值是固定的、所有实例共享,可以声明为类常量,支持声明时直接赋值:

TNumbers = class
private
  const NumbersPriv : array[1..7] of integer = (1,2,4,5,6,7,2);
public
  const NumbersPub : array[1..7] of integer = (1,2,4,5,6,7,2);
end;

内容的提问来源于stack exchange,提问作者user1937012

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 17:24:04