Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Object Pascal: кроссплатформенные технологии > Передача даных в модуль


Автор: JJJLexusJJJ 1.4.2007, 12:52
Не удается передать данные в модуль 
выдает ошибку: 

Constant out of range 
Код

CtrlPt[-1] := CtrlPt[1];


и 

Type mismatch 
Код

BSpline (CtrlPt, NumPts, Res, LightGreen); 


хотя CtrlPt объявлен как: 

Код

TYPE 
   Point3D = Record 
     X, Y, Z: Real; 
   End; 

VAR CtrlPt: Array[-1..80] Of Point3D; 


объявление переменных(массива записей одинаковое что в модуле, что в main program)
(до создания модуля все работало отлично, пока процедуры были в main program)

Или подскажите как сделать CtrlPt глобальной переменной, если это возможно

Если хотите то можете взглянуть на код программы:

Автор: volvo877 1.4.2007, 13:19
JJJLexusJJJ,
проблема в том, что открытые массивы индексируются с 0, и обращение к индексу -1 однозначно трактуется как выход за допустимый диапазон... Что я бы сделал:

Первая ошибка - в модуле Polinom:
Код

TYPE
  CtrlPtType = Array[-1..80] Of Point3D; { <--- Добавляешь этот тип }
VAR
  CtrlPt: CtrlPtType;

FUNCTION PtCtrl(x,y:real):boolean;
PROCEDURE BSpline (CtrlPt: CtrlPtType; N, Resolution, Colour: Integer); { <--- Изменяешь описание }
PROCEDURE Catmull_Rom_Spline (N, Resolution, Colour: Integer);

Соответственно, в реализации BSpline тоже меняешь тип... Тогда первая ошибка уходит...

Вторая ошибка должна исправиться так:
Основная программа:
Код

TYPE
   (* 
   Point3D = Record <--- Этот тип уже описан в модуле !!! Убираем его ...
     X, Y, Z: Real;
   End;
   *)
   Configs = Record
     NumPts: Byte;
   End;

VAR  
     (*
     CtrlPt: CtrlPtType; { <--- Этот массив тоже уже описан в модуле - пользуемся им... }
     *)
     Config: Configs;


Автор: JJJLexusJJJ 2.4.2007, 08:38
Спасибо за помощь, все тепрь работает smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)