Delphi 编译错误“常量表达式预期”的const初始化

5ssjco0h  于 2023-10-18  发布在  其他
关注(0)|答案(1)|浏览(109)

我试图将一些Java代码翻译成 Delphi ,在类中定义常量时遇到了一个问题。下面是代码片段:

TALSplineOverScroller = class(TObject)
private
  const INFLEXION: Single = 0.35;
  const START_TENSION: Single = 0.5;
  const P1: Single = TALSplineOverScroller.START_TENSION * TALSplineOverScroller.INFLEXION;
end;

当我试着编译它时,我得到了错误:
E2026需要常量表达式
在声明P1的行上。为什么会发生这种情况,我该如何解决?

bkhjykvo

bkhjykvo1#

首先,请注意,您的问题不包含问题的 * 最小 * 示例。
这门课是一个红色的鲱鱼。
下面是一个更好的例子:

const
  INFLEXION: Single = 0.35;
  START_TENSION: Single = 0.5;
  P1: Single = START_TENSION * INFLEXION;

但它仍然不是最小的。下面的例子是你应该发布的(在一个“完美”的问题中):

const
  a: Single = 0.1;
  b = 10 * a;

现在,让我回答这个问题,即。为什么这个不能编译!
通常情况下,答案可以在文档中找到。
E2026异常的文档说:
编译器期望在这里有一个常量表达式,但是它找到的表达式不是常量。
什么是“常量表达式”?先来看看Declared Constants
声明的常量是 true constantstyped constants。这两种常数表面上相似,但它们受不同的规则支配,用于不同的目的。
[...]
类型化常量与真常量不同,它可以保存数组、记录、过程和指针类型的值。类型化常量不能出现在常量表达式中。
因此,根据设计,不能在常量表达式中使用类型化常量。
一个明显的解决方法是使用true常量而不是类型化常量:

const
  a = 0.1;
  b = 10 * a;

如果这是可以接受的,在你的情况下,我不知道。例如,这将改变SizeOf(a)

相关问题