-3

我最近遇到了这种数据类型不匹配的问题。这是我以前从未见过的。我希望有人可以解释这些是什么以及它们有何不同。

我得到的错误是 F2063。[DCC 错误] E2010 不兼容的类型:“AnsiChar”和“Char”

4

1 回答 1

7

从历史上看,在 Delphi 中,Char类型实际上是ANSIChar类型的同义词。也就是说,单个字节表示 ANSI 代码页中的字符。 注意: 这是一种简化,忽略了多字节字符引起的复杂性,多字节字符可能在 ANSI 字符串中遇到,但足以满足此答案。

这与String类型实际上是ANSIString的同义词这一事实相对应。

在 Delphi 2009 以后,这种情况发生了变化。

在 Delphi 2009 中,StringChar类型分别成为UnicodeString(具有附加功能的WideString)和WideChar的同义词,反映了向 Unicode 作为字符串和字符类型的本机格式的过渡。WideChar是一个2 字节的值,表示 Unicode 的单个字符(或代理对的一半)。

因此,在 Delphi 2009 之前的 Delphi 版本中,以下两个变量属于兼容类型:

var
  ach: ANSIChar;
  ch: Char;         // Synonymous with ANSIChar

然而,在 Delphi 2009 及更高版本中,“ch”声明的含义发生了变化:

var
  ach: ANSIChar;
  ch: Char;         // Synonymous with WIDEChar

结果,achch变量不再是兼容的类型。

即,您收到此错误的原因是您有一些使用ANSIChar类型声明的代码和其他使用Char类型声明的值的代码。当使用Char = ANSIChar的旧版本 Delphi 编译时,这两组代码是兼容的,但在 Delphi 2009 及更高版本中Char = WideChar,因此这两种类型(CharANSIChar兼容。

于 2014-10-20T19:20:56.310 回答