1 Востаннє редагувалося Torbins (02.10.2014 18:11:27)

Тема: Динамічні масиви, помилка

procedure arrayS(a:array of string;s:string;Xmls:IXMLNode);
var
  f:integer;
begin
  SetLength(a,Xmls.ChildNodes.Count); тут ошибка
  for f := 0 to Xmls.ChildNodes.Count - 1 do
    a[f] := Xmls.ChildNodes.Nodes[f].AttributeNodes.Nodes[s].Text;
end;

Як виправити дану помилку?

2

Re: Динамічні масиви, помилка

Що за помилка?
Скоріше за все у такому вигляді компілятор сприймає ваш масив як Open Array Parameter. Спробуйте оголосити тип потрібного вам масиву:

type
  TStrArray = array of string;

І використовуйте його у заголовку функції.

3

Re: Динамічні масиви, помилка

Якщо ви не напишите, яка саме помилка, то ми навряд чи вам допоможемо.
І який сенс змінювати масив, якщо він не повертається назад?

4

Re: Динамічні масиви, помилка

[dcc32 Error] processingXML.pas(19): E2008 Incompatible types
[dcc32 Fatal Error] F2063 Could not compile used unit 'processingXML.pas'

19 SetLength(a,Xmls.ChildNodes.Count); тут ошибка

5

Re: Динамічні масиви, помилка

А якого типу значення повертає Xmls.ChildNodes.Count?
І уточнюйте середовище розробки і сторонні бібліотеки.

6

Re: Динамічні масиви, помилка

Xmls.ChildNodes.Count

це Integer.
Якщо замінити

Xmls.ChildNodes.Count

  на будь яке ціле число ошибка тасама, здається вона виникає через зміни розміра масива a.

SetLength(a,5);

Якщо

SetLength(a[0],5);

так то ошибки нема.

7

Re: Динамічні масиви, помилка

Можу вам порадити замінити динамічний масив на TStringList, це кошерно з будь-якої точки зору. Ну, або дослухайтеся до пана Більбо Torbins-а.

Подякували: Stanislav Stecenko1