Наборы в Delphi XE не работают так же, как в D7 - PullRequest
7 голосов
/ 08 июля 2011

У меня были эти константы в программе Delphi 7.Они не компилируются под Delphi XE.

TYPE
  TSingleChar= AnsiChar;

CONST
  noData: TSingleChar= '.';
  Ambiguity= ['x'];
  DNA_Ambig= ['x', noData]+ Ambiguity;

[Ошибка DCC] E2026 Ожидается постоянное выражение.

  1. Что изменилось в XE по сравнению с моим старым кодомне компилируется?
  2. Я полагаю, что код, как он есть, интерпретируется как Unicode.Я прав?

Ответы [ 2 ]

8 голосов
/ 08 июля 2011

«Исправить» это так:

TYPE
  TSingleChar= AnsiChar;

CONST
  Const_noData = '.';
  noData: TSingleChar= Const_noData;
  Ambiguity= ['x'];
  DNA_Ambig= ['x', Const_noData]+ Ambiguity;

* * * * * * * * * * * * * * * * * * * * Const_noData * * * * является истинным константой для компилятора, что позволяет вам инициализировать как noData, так и DNA_Ambig, используя его. И вы все еще уважаете принцип СУХОЙ, то есть есть только одно определение для noData, Const_noData.

7 голосов
/ 08 июля 2011
const
  Ambiguity:  TAnsiCharSet = ['B', 'D', 'H'];
  Ambiguity2: TAnsiCharSet = ['C', 'c', 't'] + Ambiguity;

не не работает.

const
  Ambiguity = ['B', 'D', 'H'];
  Ambiguity2 = ['C', 'c', 't'] + Ambiguity;

работает работает. Типизированные константы вообще не являются константами ...

(Обратите внимание, что проблема не имеет ничего общего с двусмысленностью. Речь идет о том, что считается константой, а что нет)

...