我最近遇到了这种数据类型不匹配的问题。这是我以前从未见过的。我希望有人可以解释这些是什么以及它们有何不同。
我得到的错误是F2063。 [DCC错误] E2010不兼容的类型:' AnsiChar'和' Char'
答案 0 :(得分:5)
历史上,在Delphi中, Char 类型实际上是 ANSIChar 类型的同义词。也就是说,一个字节代表ANSI代码页中的字符。 注意: 这是一种简化,忽略了ANSI字符串中可能遇到的多字节字符所引起的复杂情况,但足以满足此答案。
这符合以下事实: String 类型实际上是 ANSIString 的同义词。
在Delphi 2009之后,这种情况发生了变化。
借助Delphi 2009, String 和 Char 类型成为 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
因此, ach 和 ch 变量不再是兼容类型。
即。您收到此错误的原因是您有一些已使用 ANSIChar 类型声明的代码以及使用声明为 Char 类型的值的其他代码。当使用旧版本的Delphi编译 Char = ANSIChar 时,这两组代码是兼容的,但在Delphi 2009及更高版本中 Char = WideChar 等两种类型( 字符和 ANSIChar )不兼容。