Определить массив Char как константу? - PullRequest
0 голосов
/ 03 мая 2020

Я использую эту функцию в Delphi 10.3.3:

function StrTrimCharsLeft(const S: string; const Chars: array of Char): string;
var
  I, L: SizeInt;
begin
  I := 1;
  L := Length(S);
  while (I <= L) and ArrayContainsChar(Chars, S[I]) do
    Inc(I);
  Result := Copy(S, I, L - I + 1);
end;

Когда я использую эту функцию таким образом, я получаю ошибку:

[Ошибка dcc32] : E2250 Не существует перегруженной версии 'StrTrimCharsLeft', которую можно вызвать с этими аргументами

const
    BomChars = ['ï', '»', '¿'];
...
s := JclStrings.StrTrimCharsLeft(s, BomChars);

Но когда я использую его таким образом, все работает хорошо без ошибки:

s := JclStrings.StrTrimCharsLeft(s, ['ï', '»', '¿']);

Итак, как я могу определить и использовать массив Char в качестве константы?

1 Ответ

3 голосов
/ 03 мая 2020

Когда вы пишете

const
  BomChars = ['ï', '»', '¿'];

, вы объявили набор с именем BomChars - не массив!

Если вы вместо этого объявите BomChars как stati c array ,

const
  BomChars: array[0..2] of Char = ('ï', '»', '¿');

, это будет работать. (См. Объявленные константы § Константы массива .)

(StrTrimCharsLeft(s, ['ï', '»', '¿']); работает, потому что здесь скобки являются частью синтаксиса open array . В частности, скобки являются частью "конструктора открытого массива".)

...