【问题标题】:What is the difference between Ansichar and char? [duplicate]Ansichar 和 char 有什么区别? [复制]
【发布时间】:2014-12-15 19:48:39
【问题描述】:

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

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

【问题讨论】:

  • 您是否尝试在谷歌上搜索该错误消息?或者按 F1 并在消息窗口中突出显示错误消息?或者尝试查看AnsiChar 和Char 的文档?
  • 太糟糕了 EMBA 搞砸了基本类型和泛型类型之间的明显区别......
  • 每个 Delphi 开发人员都应该知道这一点,无论他们使用什么版本。
  • 我不确定将其标记为重复是否正确。关于特定编译器错误的特定问题与更广泛的“WideChar 和 ANSIChar 之间有什么区别?”是不同的问题,即使后者的答案涉及理解前者的答案。这就像“为什么我的车无法启动?” vs “煤炭和石油有什么区别?” :)

标签: delphi variables types char widechar


【解决方案1】:

从历史上看,在 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 等这两种类型( Char 和 ANSIChar)不兼容。

【讨论】:

    猜你喜欢
    • 2011-06-23
    • 2012-08-14
    • 2020-07-29
    • 2014-02-15
    • 2015-01-17
    • 2016-06-20
    • 2014-07-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多