如何在Delphi中定义包含其他常量记录的常量记录?具体情况:使用向量的矩阵

如何在Delphi中定义包含其他常量记录的常量记录?具体情况:使用向量的矩阵,delphi,constants,delphi-xe2,record,Delphi,Constants,Delphi Xe2,Record,假设我在一个单元中有一个简单的记录,例如: TVector2D = record public class function New(const x, y: Accuracy): TVector2D; static; public x, y: Accuracy; end; TMatrix3D = record public class function New(const row1, row2, row3: TVector3D): TMatrix3D; static; public

假设我在一个单元中有一个简单的记录,例如:

TVector2D = record
public
  class function New(const x, y: Accuracy): TVector2D; static;
public
  x, y: Accuracy;
end;
TMatrix3D = record
public
  class function New(const row1, row2, row3: TVector3D): TMatrix3D; static;
public
  Index : array [0..2] of TVector3D;
end;
然后,我在同一单元中有第二条记录,该记录是使用上述一组记录构建的,例如:

TVector2D = record
public
  class function New(const x, y: Accuracy): TVector2D; static;
public
  x, y: Accuracy;
end;
TMatrix3D = record
public
  class function New(const row1, row2, row3: TVector3D): TMatrix3D; static;
public
  Index : array [0..2] of TVector3D;
end;
然后,我定义轴方向常数,如下所示:

//Unit vector constants
const
  iHat : TVector3D = (x: 1; y: 0; z: 0);
  jHat : TVector3D = (x: 0; y: 1; z: 0);
  kHat : TVector3D = (x: 0; y: 0; z: 1);
现在,我想使用上述常量定义另一个常量,例如:

  identity : TMatrix3D = (row1: iHat; row2: jHat; row3: kHat);
然而,上述尝试并不奏效。在Delphi XE2中如何实现这一点


非常感谢您的努力。:-)

这是不可能的。在常量记录声明中,成员值必须为。也就是说,您不能像以前那样使用类型化常量

这句话是这样说的,我强调:

记录常数

要声明记录常量,请将每个字段的值指定为 fieldName:值,字段赋值用分号分隔- 在声明末尾的括号中。这些值必须是 由常量表达式表示

所以你需要这样声明:

const
  identity: TMatrix3D = (Index:
    ((x: 1; y: 0; z: 0),
     (x: 0; y: 1; z: 0),
     (x: 0; y: 0; z: 1))
    );

让人沮丧的是你不得不重复自己的话,但我想这是你能做的最好的了。

@FreeConsulting-请提供一个链接呃,什么链接?…一个指向这个问题的链接,这个问题可能是重复的。我在第一条评论中链接了这个问题。不知道为什么它不适合你。移动平台?