Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.06.2011, 20:00   #1
xabik
Пользователь
 
Регистрация: 03.06.2009
Сообщений: 22
По умолчанию Задание длины динамического массива в Delphi

Такая вот тема. Пишу программу. Вынес всю математику в отдельный модуль (что б глаз не мозолила). Разместил в этом модуле процедуру которая парсит XML файл, считает количество элементов с определенным именем в нем и задает размер динамического Массива который передан в эту процедуру в качестве параметра.

Так вот беда...

Когда происходит выход из процедуры Массив обнуляется. Как быть?

То есть как задать длину массива в процедуре в которую этот массив передан в качестве параметра?

Последний раз редактировалось xabik; 13.06.2011 в 20:23.
xabik вне форума Ответить с цитированием
Старый 13.06.2011, 20:23   #2
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

как объявил этот параметр покажи
ZuBy вне форума Ответить с цитированием
Старый 13.06.2011, 20:31   #3
xabik
Пользователь
 
Регистрация: 03.06.2009
Сообщений: 22
По умолчанию

Основной модуль, где форма. Код проверяет длину массива

Код:
procedure TForm1.ToolButton1Click(Sender: TObject);
begin
   ParserXML(XMLMap,ArrStreet,ArrHouse,Arr__90Node);
   Label1.Caption:='';
   Label1.Caption:=IntToStr(Length(Arr__90Node));
end;

Модуль MathUnit

Код:
procedure ParserXML(XMLDoc:TXMLDocument;ArrStreet:TArr_Street;ArrHouse:TArr_House; ArrNode:TArr_Node);
var i, sch:integer;
begin
  with XmlDoc.ChildNodes.Nodes[1].ChildNodes do begin
    for i := 0 to Count-1 do begin
      if Nodes[i].NodeName='node' then sch:=sch+1;
    end;
  end;
  sch:=sch;
  SetLength(ArrNode,sch);
end;

Последний раз редактировалось xabik; 13.06.2011 в 20:46.
xabik вне форума Ответить с цитированием
Старый 13.06.2011, 20:34   #4
xabik
Пользователь
 
Регистрация: 03.06.2009
Сообщений: 22
По умолчанию

Объявление типа элемента массива и типа массива в модуле MathUnit
Код:

  TXML_MAP_Node = Record
    X,Y:integer;
    Latitude,longitude:Extended;

...

  TArr_Node = array of TXML_MAP_Node;

Последний раз редактировалось xabik; 13.06.2011 в 20:47.
xabik вне форума Ответить с цитированием
Старый 13.06.2011, 20:36   #5
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

Код:
procedure ParserXML(XMLDoc:TXMLDocument; ArrStreet: TArr_Street; ArrHouse: TArr_House; var ArrNode:TArr_Node);
var i, sch:integer;
begin
  with XmlDoc.ChildNodes.Nodes[1].ChildNodes do begin
    for i := 0 to Count-1 do begin
      if Nodes[i].NodeName='node' then sch:=sch+1;
    end;
  end;
  sch:=sch;
  SetLength(ArrNode,sch);
end;
ZuBy вне форума Ответить с цитированием
Старый 13.06.2011, 20:45   #6
xabik
Пользователь
 
Регистрация: 03.06.2009
Сообщений: 22
По умолчанию

Код:
sch:=sch;
Это что бы вставить точку останова в код.

Последний раз редактировалось xabik; 13.06.2011 в 21:22.
xabik вне форума Ответить с цитированием
Старый 13.06.2011, 21:14   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

позволю Выделить то, что Вам ZuBy посоветовал (кстати, я присоединяюсь к его совету!)

Цитата:
Сообщение от ZuBy
Код:
procedure ParserXML(XMLDoc:TXMLDocument; ArrStreet: TArr_Street; ArrHouse: TArr_House; var ArrNode:TArr_Node);
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.06.2011, 21:26   #8
xabik
Пользователь
 
Регистрация: 03.06.2009
Сообщений: 22
По умолчанию

[DCC Error] MathUnit.pas(40): E2037 Declaration of 'ParserXML' differs from previous declaration

таков ответ компилятора

...

Sorry.

Всё работает. Благодарю за советы. Большое спасибо!!!

Последний раз редактировалось xabik; 13.06.2011 в 21:34.
xabik вне форума Ответить с цитированием
Старый 13.06.2011, 21:31   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от xabik
[DCC Error] MathUnit.pas(40): E2037 Declaration of 'ParserXML' differs from previous declaration

таков ответ компилятора
Неужели непонятно, что компилятору не понравилось?!

Разумеется, определение и реализация любого метода (процедуры/функции) ДОЛЖНЫ СОВПАДАТЬ!

Перейдите в интерфейсную часть, где Вы описываете процедуру ParserXML и там тоже исправьте аналогичным образом (добавить VAR )
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача динамического массива krosh87 Работа с сетью в Delphi 3 24.02.2011 18:39
Очистка динамического массива JohnnySuperb Общие вопросы Delphi 11 10.12.2010 07:47
Динамические массивы, определение/задание его длины Paul Hindenburg Общие вопросы C/C++ 1 31.05.2009 12:21
Сохранение динамического массива Horus92 Помощь студентам 3 07.05.2009 12:36