2014-10-20 2 views
-3

Я недавно столкнулся с этим несоответствием типа данных. Этого я никогда не видел. Надеюсь, кто-то может объяснить, что это такое и как они отличаются.В чем разница между Ansichar и char?

Ошибка У меня был F2063. [Ошибка ДКК] E2010 Несовместимые типы: «AnsiChar» и «Чар»

+3

Вы попробовали Googling для сообщения об ошибке? Или нажатие F1 с сообщением об ошибке, выделенным в окне сообщений? Или попробуйте найти в документации для [AnsiChar] (http://docwiki.embarcadero.com/Libraries/XE7/en/System.AnsiChar) и [Char] (http://docwiki.embarcadero.com/Libraries/XE7/ ан/System.Char)? –

+0

рядом с: [Разница между PAnsiChar и PChar] (http: // stackoverflow.com/questions/1803426/difference-between-pansichar-and-pchar) – bummi

+0

Слишком плохо EMBA упустил явное различие между фундаментальными и родовыми типами .... –

ответ

5

Исторически в Delphi, то Чар тип был фактически синонимом AnsiChar типа. То есть, один байт, представляющий символ из кодовой страницы ANSI. ПРИМЕЧАНИЕ:Это упрощение, которое игнорирует сложности, возникающие из многобайтовых символов, которые могут встречаться в строке ANSI, но этого достаточно для этого ответа.

Это соответствует с тем, что Строка тип был фактически синонимом AnsiString.

В Delphi 2009 г. это изменилось.

С Delphi 2009, Строка и типы Char стали синонимами для UnicodeStringWideString с дополнительными возможностями) и WideChar, соответственно, отражая переход к Unicode как родной формат для строки и типы символов. A WideChar - это 2-байтовое значение, представляющее один символ Юникода (или одну половину суррогатной пары).

Поэтому в версиях Delphi до Delphi 2009, следующие две переменные были совместимых типов:

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

Однако в Delphi 2009 и позднее значение «ч» деклараций изменений:

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

в результате ACH и ч переменных больше не совместимые типы.

то есть причина, вы получаете эту ошибку в том, что у вас есть код, который был объявлен с AnsiChar типов и другим кодом, который, используя значения, объявленные типа Чара. При компиляции с старой версией Delphi, где Char = AnsiChar, два набора кода совместим, но в Delphi 2009 и позже Char = WideChar и поэтому оба типа (Char и AnsiChar) является не совместимый.