Delphi中的集合XE与它们在D7中的工作方式不同

时间:2011-07-08 12:42:00

标签: delphi delphi-7 delphi-xe

我在Delphi 7程序中有这个常量。他们没有在Delphi XE下编译。

TYPE
  TSingleChar= AnsiChar;

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

[DCC错误] E2026常量表达式   预期

  1. XE中我的旧代码无法编译的内容是什么?
  2. 我认为代码实际上被解释为Unicode。我是对的吗?

2 个答案:

答案 0 :(得分:8)

“修复”它是这样的:

TYPE
  TSingleChar= AnsiChar;

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

就编译器而言,Const_noData是一个真正的const,允许您使用它初始化noDataDNA_Ambig。而你仍然尊重DRY原则,即noData只有一个定义,Const_noData

答案 1 :(得分:7)

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

工作。

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

工作。类型常量根本不是常量...

(请注意,这个问题与歧义无关。它是关于什么被认为是常数,什么不是。)