Delphi 为什么可以';我不能把一个压缩字符串分配给另一个吗?

Delphi 为什么可以';我不能把一个压缩字符串分配给另一个吗?,delphi,delphi-10.2-tokyo,incompatibletypeerror,arrays,Delphi,Delphi 10.2 Tokyo,Incompatibletypeerror,Arrays,各国: 如果两种不同类型至少满足以下条件之一,则它们是兼容的 两者都是具有相同字符数的压缩字符串类型 但是,在Delphi Tokyo中,这不会编译: procedure TForm2.Button3Click(Sender: TObject); var LSource: packed array [0..3] of Char; LTarget: packed array [0..3] of Char; begin LSource := '1234'; LTarget := LS

各国:

如果两种不同类型至少满足以下条件之一,则它们是兼容的

两者都是具有相同字符数的压缩字符串类型

但是,在Delphi Tokyo中,这不会编译:

procedure TForm2.Button3Click(Sender: TObject);
var
  LSource: packed array [0..3] of Char;
  LTarget: packed array [0..3] of Char;
begin
  LSource := '1234';
  LTarget := LSource; // ← ← ← E2008 Incompatible types
  ShowMessage(LTarget);
end;

关于压缩字符串的文档并不多。使用
压缩数组[1..4]
会将赋值从字符串文本中断开。删除
压缩的
标识符根本不会改变。我遗漏了什么吗?

使用了经典的Win32编译器。代码也没有在XE2中编译,因此这不是新问题。您的变量使用相同长度的不同压缩字符串类型,因此根据文档,理论上它们应该是类型兼容和赋值兼容的,但实际上它们不是。声明数组类型并对所有变量使用相同类型将是一个简单的解决方案。注意,如果使用
var LSource,LTarget:字符的压缩数组[0..3]
T4CHARRAY类型=字符的压缩数组[0..3];变量来源:T4Charray;l目标:T4字符以便
LSource
LTarget
使用相同的类型,而不是单独的不同类型。